/*******************************************************************************
* Copyright [2015] [Onboard team of SERC, Peking University]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*******************************************************************************/
package com.onboard.service.collaboration;
import java.util.List;
import com.onboard.domain.mapper.model.ProjectExample;
import com.onboard.domain.model.Project;
import com.onboard.domain.model.User;
import com.onboard.dto.ProjectDTO;
import com.onboard.service.base.BaseService;
/**
* {@link Project}服务接口
*
* @author ruici,yewei
*
*/
public interface ProjectService extends BaseService<Project, ProjectExample> {
/**
* 获取指定公司中所有活动(非archived)项目列表
*
* @param companyId
* 公司id
* @return
*/
List<Project> getActiveProjectsByCompany(int companyId, int start, int limit);
/**
* 获取指定公司中所有归档(archived)项目列表
*
* @param companyId
* 公司id
* @return
*/
List<Project> getArchivedProjecsByCompany(int companyId, int start, int limit);
/**
* 获取Company下的所有Project
*
* @param companyId
* @return
*/
List<Project> getProjectsByCompany(int companyId, int start, int limit);
/**
* 获取某个Company下某用户创建的所有Project
*
* @param userId
* @return
*/
List<Project> getProjectListByOwnerByCompany(int userId, int companyId, int start, int limit);
/**
* 获取某个Company下某用户参与的所有Project
*
* @param userId
* @param companyId
* @param start
* @param limit
* @return
*/
List<Project> getActiveProjectListByUserByCompany(int userId, int companyId, int start, int limit);
/**
* 获取某个Company下某用户参与的所有Project的Id
*
* @param userId
* @param companyId
* @param start
* @param limit
* @return
*/
List<Integer> getProjectIdListByUserByCompany(int userId, int companyId, int start, int limit);
/**
* 获取所有回收站中的Project
*
* @return
*/
List<Project> getDiscardedProjectListByCompany(int companyId, int start, int limit);
/**
* 归档项目
*
* @param id
* 项目id
*/
void archiveProject(int id);
/**
* 激活项目
*
* @param id
* 项目id
*/
void activateProject(int id);
/**
* 为团队成员授予项目权限
*
* @param id
* 项目id
* @param userIds
* 成员id列表
*/
void grantAccessToExistingPeople(Project project, List<User> users);
/**
* 通过邮件邀请新成员加入项目
*
* @param id
* 项目id
* @param emailAddresses
* 新成员邮件列表
*/
void grantAccessViaEmailAddress(Project project, List<String> emailAddresses);
/**
* 解除某成员项目访问权限
*
* @param id
* 项目id
* @param userId
* 成员id
*/
void revokeAccess(int projectId, int userId);
/**
* TODO: move this to database 获取项目Topic数量
*
* @param projectId
* @return
*/
int getTopicCount(int projectId);
/**
* TODO: move this to database 获取Attachment数量
*
* @param projectId
* @return
*/
int getAttachmentCount(int projectId);
/**
* TODO: move this to database 获取Todo数量
*
* @param projectId
* @return
*/
int getTodoCount(int projectId);
/**
* TODO: move this to database 获取Document数量
*
* @param projectId
* @return
*/
// int getDocumentCount(int projectId);
/**
* TODO: move this to database 获取User数量
*
* @param projectId
* @return
*/
int getUserCount(int projectId);
/**
* 在项目页面对项目进行拖动排序
*
* @param projectIds
*/
void sortProject(List<Integer> projectIds);
/**
* @param userId
* @param companyId
* @param start
* @param limit
* @return
*/
List<Project> getArchivedProjectListByUserByCompany(int userId, int companyId, int start, int limit);
/**
* 根据用户和组织获得没有删除和归档的项目列表Id
*
* @param userId
* @param companyId
* @param start
* @param limit
* @return
*/
List<Integer> getActiveProjectIdListByUserByCompany(int userId, int companyId, int start, int limit);
/**
* 获取项目下的任务状态
*
* @param projectId
* @return
*/
List<String> getTodoStatusByProjectId(Integer projectId);
/**
* 为项目添加任务状态
*
* @param projectId
* @param todoStatus
* @return
*/
boolean addTodoStatusToProject(Integer projectId, String todoStatus);
/**
* 将状态从某个项目中删除
*
* @param projectId
* @param todoStatus
* @return
*/
boolean removeTodoStatusFromProject(Integer projectId, String todoStatus);
/**
* Create a project according to a DTO
*
* @param projectDTO
* @return created project
*/
Project createProject(ProjectDTO projectDTO);
/**
* Update a project according to a DTO
*
* @param projectDTO
* @return updated project
*/
Project updateProject(ProjectDTO projectDTO);
}