/// <summary> /// 즐겨찾기를 위한 질의 객체 (<see cref="DetachedCriteria"/>)를 빌드합니다. /// </summary> /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param> /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerCode">소유자 코드, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param> /// <param name="registerCode">등록자 코드</param> /// <param name="registTimeRange">등록일 검색 범위</param> /// <returns></returns> public virtual QueryOver<Favorite, Favorite> BuildQueryOverOfFavorite(Product product, Company company, string ownerCode, ActorKinds? ownerKind = null, string registerCode = null, ITimePeriod registTimeRange = null) { if(IsDebugEnabled) log.Debug(@"즐겨찾기 조회를 위한 QueryOver를 생성합니다... " + @"company={0}, product={1}, ownerCode={2}, ownerKind={3}, registerCode={4}, registTimeRange={5}", company, product, ownerCode, ownerKind, registerCode, registTimeRange); var query = QueryOver.Of<Favorite>(); if(product != null) query.AddWhere(f => f.ProductCode == product.Code); if(company != null) query.AddWhere(f => f.CompanyCode == company.Code); if(ownerCode.IsNotWhiteSpace()) query.AddWhere(f => f.OwnerCode == ownerCode); if(ownerKind.HasValue) query.AddWhere(f => f.OwnerKind == ownerKind.Value); if(registerCode.IsNotWhiteSpace()) query.AddWhere(f => f.RegisterCode == registerCode); if(registTimeRange != null && registTimeRange.IsAnytime == false) query.AddBetween(f => f.RegistDate, registTimeRange.StartAsNullable, registTimeRange.EndAsNullable); return query; }
/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 Criteria를 빌드합니다. /// </summary> /// <param name="resource">리소스 종류</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 Criteria</returns> public DetachedCriteria BuildCriteriaOfResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds? actorKind, AuthorityKinds? authorityKind) { return BuildQueryOverOfResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind).DetachedCriteria; }
/// <summary> /// <see cref="File"/> 정보를 조회하기 위한 Criteria를 빌드합니다. /// </summary> /// <param name="fileMapping">파일 매핑 정보</param> /// <param name="resourceId">리소스 Id</param> /// <param name="resourceKind">리소스 종류</param> /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param> /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param> /// <param name="category">분류</param> /// <param name="fileName">파일명</param> /// <param name="fileType">파일 종류</param> /// <param name="fileGroup">파일 그룹</param> /// <param name="fileFloor">파일 Floor</param> /// <returns></returns> public DetachedCriteria BuildCriteriaOfFile(FileMapping fileMapping, string resourceId, string resourceKind, string ownerCode, ActorKinds? ownerKind, string category, string fileName, string fileType, int? fileGroup, int? fileFloor) { return BuildQueryOverOfFile(fileMapping, resourceId, resourceKind, ownerCode, ownerKind, category, fileName, fileType, fileGroup, fileFloor) .DetachedCriteria; }
public GroupActorIdentity(string companyCode, string groupCode, string actorCode, ActorKinds actorKind = ActorKinds.User) { companyCode.ShouldNotBeWhiteSpace("companyCode"); groupCode.ShouldNotBeWhiteSpace("groupCode"); actorCode.ShouldNotBeWhiteSpace("actorCode"); CompanyCode = companyCode; GroupCode = groupCode; ActorCode = actorCode; ActorKind = actorKind; }
/// <summary> /// <see cref="File"/> 정보를 조회하기 위한 QueryOver를 빌드합니다. /// </summary> /// <param name="fileMapping">파일 매핑 정보</param> /// <param name="resourceId">리소스 Id</param> /// <param name="resourceKind">리소스 종류</param> /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param> /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param> /// <param name="category">분류</param> /// <param name="fileName">파일명</param> /// <param name="fileType">파일 종류</param> /// <param name="fileGroup">파일 그룹</param> /// <param name="fileFloor">파일 Floor</param> /// <returns></returns> public QueryOver<File, File> BuildQueryOverOfFile(FileMapping fileMapping, string resourceId, string resourceKind, string ownerCode, ActorKinds? ownerKind, string category, string fileName, string fileType, int? fileGroup, int? fileFloor) { if(IsDebugEnabled) log.Debug(@"파일 정보를 조회하기 위한 QueryOver를 빌드합니다... " + @"fileMapping={0}, resourceId={1}, resourceKind={2}, ownerCode={3}, ownerKind={4}, " + @"category={5}, fileName={6}, fileType={7}, fileGroup={8}, fileFloor={9}", fileMapping, resourceId, resourceKind, ownerCode, ownerKind, category, fileName, fileType, fileGroup, fileFloor); var query = QueryOver.Of<File>(); query.AddEqOrNull(f => f.FileMapping, fileMapping); if(resourceId.IsNotWhiteSpace()) query.AddWhere(f => f.ResourceId == resourceId); if(resourceKind.IsNotWhiteSpace()) query.AddWhere(f => f.ResourceKind == resourceKind); if(ownerCode.IsNotWhiteSpace()) query.AddWhere(f => f.OwnerCode == ownerCode); if(ownerKind.HasValue) query.AddWhere(f => f.OwnerKind == ownerKind.Value); if(category.IsNotWhiteSpace()) query.AddWhere(f => f.Category == category); if(fileName.IsNotWhiteSpace()) query.AddWhere(f => f.FileName == fileName); if(fileType.IsNotWhiteSpace()) query.AddWhere(f => f.FileType == fileType); if(fileGroup.HasValue) query.AddWhere(f => f.FileGroup == fileGroup); if(fileFloor.HasValue) query.AddWhere(f => f.FileFloor == fileFloor); return query; }
/// <summary> /// 생성자 /// </summary> /// <param name="productCode">제품 코드</param> /// <param name="resourceCode">리소스 종류 코드</param> /// <param name="resourceInstanceId">리소스 인스턴스의 Id</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 Id (회사,부서,그룹,사용자)</param> /// <param name="actorKind">접근자 종류</param> public ResourceActorIdentity(string productCode, string resourceCode, string resourceInstanceId, string companyCode, string actorCode, ActorKinds actorKind = ActorKinds.User) { productCode.ShouldNotBeWhiteSpace("productCode"); resourceCode.ShouldNotBeWhiteSpace("resourceCode"); resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId"); companyCode.ShouldNotBeWhiteSpace("companyCode"); actorCode.ShouldNotBeWhiteSpace("actorCode"); ProductCode = productCode; ResourceCode = resourceCode; ResourceInstanceId = resourceInstanceId; CompanyCode = companyCode; ActorCode = actorCode; ActorKind = actorKind; }
/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다. /// </summary> /// <param name="resource">리소스 종류</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns> public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(Resource resource, string resourceInstanceId, string companyCode = null, string actorCode = null, ActorKinds? actorKind = null, AuthorityKinds? authorityKind = null) { if(resource == null) return BuildQueryOverOfResourceActor(null, null, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); if(resource.ProductCode == null) return BuildQueryOverOfResourceActor(null, resource.Code, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); return BuildQueryOverOfResourceActor(resource.ProductCode, resource.Code, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); }
/// <summary> /// 지정한 접근자의 리소스 접근 권한 정보를 모두 조회합니다. /// </summary> /// <param name="companyCode">접근자 소속 회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param> /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param> /// <param name="orders">정렬 순서</param> /// <returns></returns> public IList<ResourceActor> FindAllResourceActorByActor(string companyCode, string actorCode, ActorKinds? actorKind, int? firstResult, int? maxResults, params INHOrder<ResourceActor>[] orders) { if(IsDebugEnabled) log.Debug(@"리소스 접근 권한 정보를 조회합니다... " + @"companyCode={0}, actorCode={1}, actorKind={2}, firstResult={3}, maxResults={4}, orders={5}", companyCode, actorCode, actorKind, firstResult, maxResults, orders.CollectionToString()); var query = BuildQueryOverOfResourceActor(null, null, companyCode, actorCode, actorKind, null).AddOrders(orders); return Repository<ResourceActor>.FindAll(query, firstResult.GetValueOrDefault(), maxResults.GetValueOrDefault()); }
/// <summary> /// 지정한 접근자의 리소스 접근 권한 정보를 모두 조회합니다. /// </summary> /// <param name="companyCode">접근자 소속 회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <returns></returns> public IList<ResourceActor> FindAllResourceActorByActor(string companyCode, string actorCode, ActorKinds? actorKind) { return FindAllResourceActorByActor(companyCode, actorCode, actorKind, null, null); }
/// <summary> /// 권한관련 정보를 가진 <see cref="ResourceActor"/>정보를 조회하기 위한 QueryOver 를 빌드합니다. /// </summary> /// <param name="productCode">제품 코드</param> /// <param name="resourceCode">리소스 종류 코드</param> /// <param name="resourceInstanceId">대상 리소스 ID</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 종류</param> /// <param name="authorityKind">권한 종류</param> /// <returns>접근 권한을 나타내는 <see cref="ResourceActor"/>를 조회하기 위한 QueryOver</returns> public QueryOver<ResourceActor, ResourceActor> BuildQueryOverOfResourceActor(string productCode, string resourceCode, string resourceInstanceId, string companyCode, string actorCode, ActorKinds? actorKind, AuthorityKinds? authorityKind) { if(IsDebugEnabled) log.Debug(@"권한관련 정보를 가진 ResourceActor 정보를 조회하기 위한 QueryOver를 빌드합니다..." + Environment.NewLine + @"productCode={0}, resourceCode={1}, resourceInstanceId={2}, companyCode={3}, actorCode={4}, actorKind={5}, authorityKind={6}", productCode, resourceCode, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var query = QueryOver.Of<ResourceActor>(); if(productCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ProductCode == productCode); if(resourceCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ResourceCode == resourceCode); if(resourceInstanceId.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ResourceInstanceId == resourceInstanceId); if(companyCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.CompanyCode == companyCode); if(actorCode.IsNotWhiteSpace()) query.AddWhere(ra => ra.Id.ActorCode == actorCode); if(actorKind.HasValue) query.AddWhere(ra => ra.Id.ActorKind == actorKind.Value); if(authorityKind.HasValue) query.AddWhere(ra => ra.AuthorityKind == authorityKind.Value); return query; }
/// <summary> /// 새로운 리소스에 대한 접근 권한 정보를 생성합니다. /// </summary> /// <param name="resource">접근 대상 리소스 종류</param> /// <param name="resourceInstanceId">접근 대상 리소스 Id</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <param name="authorityKind">접근 권한 종류</param> /// <returns>새로 생성한 리소스 접근 권한 정보</returns> public ResourceActor CreateResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds actorKind, AuthorityKinds authorityKind) { resource.ShouldNotBeNull("resource"); resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId"); companyCode.ShouldNotBeWhiteSpace("companyCode"); if(IsDebugEnabled) log.Debug(@"새로운 리소스 접근 권한 정보를 생성합니다... " + @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}", resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); return Repository<ResourceActor>.SaveOrUpdate(resourceActor); }
/// <summary> /// 즐겨찾기 조회 /// </summary> public Favorite FindOneFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind) { if(IsDebugEnabled) log.Debug(@"새로운 즐겨찾기(Favorite) 정보를 조회합니다... product={0}, company={1}, ownerCode={2}, ownerKind={3}", product, company, ownerCode, ownerKind); return Repository<Favorite>.FindOne(BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind)); }
/// <summary> /// 소유자의 즐겨찾기 정보를 Paging 처리해서 로드합니다. /// </summary> /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param> /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param> /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param> /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param> /// <param name="orders">정렬 순서</param> /// <returns></returns> public IPagingList<Favorite> GetPageOfFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind, int pageIndex, int pageSize, params INHOrder<Favorite>[] orders) { if(IsDebugEnabled) log.Debug(@"소유자의 즐겨찾기 정보를 Paging 처리해서 로드합니다... " + @"product={0}, company={1}, ownerCode={2}, ownerKind={3}, pageIndex={4}, pageSize={5}, orders={6}", product, company, ownerCode, ownerKind, pageIndex, pageSize, orders.CollectionToString()); var query = BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind); return Repository<Favorite>.GetPage(pageIndex, pageSize, query, orders); }
/// <summary> /// 그룹구성원 정보를 조회하기 위한 Criteria를 빌드합니다. (null 이거나 empty string인 경우에는 검색 조건에서 제외됩니다.) /// </summary> /// <param name="companyCode">회사코드</param> /// <param name="groupCode">그룹 코드</param> /// <param name="actorCode">소속원 코드</param> /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param> /// <returns></returns> public static DetachedCriteria BuildCriteriaOfGroupActor(string companyCode, string groupCode, string actorCode, ActorKinds? actorKind) { return BuildQueryOverOfGroupActor(companyCode, groupCode, actorCode, actorKind).DetachedCriteria; }
/// <summary> /// 새로운 리소스에 대한 접근 권한 정보를 추가합니다. (NOTE: StatelessSession을 사용하여 추가하므로 성능이 빠릅니다.) /// </summary> /// <param name="resource">접근 대상 리소스 종류</param> /// <param name="resourceInstanceId">접근 대상 리소스 Id</param> /// <param name="companyCode">회사 코드</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류</param> /// <param name="authorityKind">접근 권한 종류</param> /// <returns>새로 생성한 리소스 접근 권한 정보</returns> public void InsertResourceActor(Resource resource, string resourceInstanceId, string companyCode, string actorCode, ActorKinds actorKind, AuthorityKinds authorityKind) { resource.ShouldNotBeNull("resource"); resourceInstanceId.ShouldNotBeWhiteSpace("resourceInstanceId"); companyCode.ShouldNotBeWhiteSpace("companyCode"); if(IsDebugEnabled) log.Debug(@"새로운 리소스 접근 권한 정보를 IStatelessSession을 사용하여 추가합니다... " + @"resource={0}, resourceInstanceId={1}, companyCode={2}, actorCode={3}, actorKind={4}, authorityKind={5}", resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); var resourceActor = new ResourceActor(resource, resourceInstanceId, companyCode, actorCode, actorKind, authorityKind); //Guard.Assert(SessionFactory.IsSQLite() == false, "StatelessSession는 SQLite 메모리 DB는 지원하지 않습니다."); resourceActor.InsertStateless(); }
/// <summary> /// <see cref="GroupActor"/>를 조회합니다. /// </summary> public GroupActor FindOneGroupActor(Group group, string actorCode, ActorKinds actorKind) { return Repository<GroupActor>.FindOne(BuildQueryOverOfGroupActor(group, actorCode, actorKind)); }
/// <summary> /// GroupActor를 조회합니다. 없으면 새로 생성해서 반환합니다. /// </summary> public GroupActor GetOrCreateGroupActor(Group group, string actorCode, ActorKinds actorKind) { group.ShouldNotBeNull("group"); var groupActor = FindOneGroupActor(group, actorCode, actorKind); if(groupActor != null) return groupActor; lock(_syncLock) new GroupActor(group, actorCode, actorKind).InsertStateless(); groupActor = FindOneGroupActor(group, actorCode, actorKind); groupActor.AssertExists("groupActor"); return groupActor; }
/// <summary> /// 지정한 구성원이 속한 그룹구성원 정보를 조회합니다. /// </summary> /// <param name="company">그룹이 소속된 회사</param> /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param> /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param> /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param> /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param> /// <param name="orders">정렬 순서</param> /// <returns></returns> public IList<GroupActor> FindAllGroupActorByActor(Company company, string actorCode, ActorKinds? actorKind, int? firstResult, int? maxResults, params INHOrder<GroupActor>[] orders) { company.ShouldNotBeNull("company"); if(log.IsDebugEnabled) log.Debug(@"지정한 구성원이 속한 그룹-구성원 정보를 조회합니다... " + @"actorCode={0}, actorKind={1}, company={2}, firstResult={3}, maxResults={4}, orders={5}", actorCode, actorKind, company, firstResult, maxResults, orders); var query = BuildQueryOverOfGroupActor(company.Code, null, actorCode, actorKind).AddOrders(orders); return Repository<GroupActor>.FindAll(query, firstResult.GetValueOrDefault(), maxResults.GetValueOrDefault()); }
/// <summary> /// 새로운 그룹을 만듭니다. /// </summary> /// <param name="group">그룹 정보</param> /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param> /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param> /// <returns></returns> public GroupActor CreateGroupActor(Group group, string actorCode, ActorKinds actorKind) { group.ShouldNotBeNull("group"); actorCode.ShouldNotBeWhiteSpace("actorCode"); if(IsDebugEnabled) log.Debug(@"새로운 그룹-구성원 정보를 생성합니다... group={0}, actorCode={1}, actorKind={2}", group, actorCode, actorKind); return Repository<GroupActor>.SaveOrUpdate(new GroupActor(group, actorCode, actorKind)); }
/// <summary> /// 즐겨찾기 생성 /// </summary> /// <param name="product">제품</param> /// <param name="company">소유자 회사</param> /// <param name="ownerCode">소유자 코드</param> /// <param name="ownerKind">소유자 종류</param> /// <param name="content">즐겨찾기 내용</param> /// <returns></returns> public Favorite CreateFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind, string content) { product.ShouldNotBeNull("product"); company.ShouldNotBeNull("company"); ownerCode.ShouldNotBeWhiteSpace("owernCode"); if(IsDebugEnabled) log.Debug(@"새로운 즐겨찾기 정보를 생성합니다... product={0}, company={1}, ownerCode={2}, ownerKind={3}, content={4}", product, company, ownerCode, ownerKind, content); var favorite = new Favorite(product, company, ownerCode, ownerKind, content); return Repository<Favorite>.SaveOrUpdate(favorite); }
/// <summary> /// 리소스 접근 권한 정보(ResourceActor) 를 Paging 처리해서 로드합니다... /// </summary> /// <param name="companyCode">접근자 소속 회사 코드 (not null)</param> /// <param name="actorCode">접근자 코드 (회사|부서|사용자|그룹 코드) (null 이면 검색 조건에서 제외)</param> /// <param name="actorKind">접근자 (부서|사용자|그룹 등) 종류 (null이면 검색 조건에서 제외)</param> /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param> /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param> /// <param name="orders">정렬 순서</param> /// <returns></returns> public IPagingList<ResourceActor> GetPageOfResourceActorByActor(string companyCode, string actorCode, ActorKinds? actorKind, int pageIndex, int pageSize, params INHOrder<ResourceActor>[] orders) { if(IsDebugEnabled) log.Debug(@"리소스 접근 권한 정보(ResourceActor) 를 Paging 처리해서 로드합니다... " + @"companyCode={0}, actorCode={1}, actorKind={2}, pageIndex={3}, pageSize={4}, orders={5}", companyCode, actorCode, actorKind, pageIndex, pageSize, orders.CollectionToString()); var query = BuildQueryOverOfResourceActor(null, null, companyCode, actorCode, actorKind, null); return Repository<ResourceActor>.GetPage(pageIndex, pageSize, query, orders); }
/// <summary> /// 소유자로 파일을 찾습니다. /// </summary> /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param> /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param> /// <returns></returns> public IList<File> FindAllFileByOwner(string ownerCode, ActorKinds? ownerKind) { if(IsDebugEnabled) log.Debug(@"Owner에 의한 File 정보를 조회합니다. ownerCode={0}, ownerKind={1}", ownerCode, ownerKind); var query = BuildQueryOverOfFile(null, null, null, ownerCode, ownerKind, null, null, null, null, null); return Repository<File>.FindAll(query); }
/// <summary> /// 소유자의 즐겨찾기 정보를 조회합니다. /// </summary> /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param> /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param> /// <param name="firstResult">첫번째 레코드 인덱스</param> /// <param name="maxResults">최대 레코드 수</param> /// <param name="orders">정렬 방식</param> /// <returns></returns> public IList<Favorite> FindAllFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind, int? firstResult, int? maxResults, params INHOrder<Favorite>[] orders) { if(IsDebugEnabled) log.Debug(@"소유자의 모든 즐겨찾기 정보를 조회합니다... " + @"ownerCode={0}, ownerKind={1}, company={2}, product={3}, firstResult={4}, maxResults={5}, orders={6}", ownerCode, ownerKind, company, product, firstResult, maxResults, orders.CollectionToString()); var query = BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind).AddOrders(orders); return Repository<Favorite>.FindAll(query, firstResult.GetValueOrDefault(), maxResults.GetValueOrDefault()); }
/// <summary> /// 소유자의 즐겨찾기 정보를 조회합니다. /// </summary> /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param> /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerCode">소유자 Id, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param> /// <returns></returns> public IList<Favorite> FindAllFavoriteByOwner(Product product, Company company, string ownerCode, ActorKinds ownerKind) { return FindAllFavoriteByOwner(product, company, ownerCode, ownerKind, null, null); }
/// <summary> /// 그룹구성원 정보를 조회하기 위한 Criteria를 빌드합니다. (null 이거나 empty string인 경우에는 검색 조건에서 제외됩니다.) /// </summary> /// <param name="group">그룹</param> /// <param name="actorCode">소속원 코드</param> /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param> /// <returns></returns> public static DetachedCriteria BuildCriteriaOfGroupActor(Group group, string actorCode, ActorKinds? actorKind) { return BuildQueryOverOfGroupActor(group, actorCode, actorKind).DetachedCriteria; }
/// <summary> /// 즐겨찾기를 위한 질의 객체 (<see cref="DetachedCriteria"/>)를 빌드합니다. /// </summary> /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param> /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerCode">소유자 코드, null이면 검색조건에서 제외합니다.</param> /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param> /// <param name="registerCode">등록자 코드</param> /// <param name="registTimeRange">등록일 검색 범위</param> /// <returns></returns> public virtual DetachedCriteria BuildCriteriaOfFavorite(Product product, Company company, string ownerCode, ActorKinds? ownerKind, string registerCode, ITimePeriod registTimeRange) { return BuildQueryOverOfFavorite(product, company, ownerCode, ownerKind, registerCode, registTimeRange).DetachedCriteria; }
/// <summary> /// 지정한 소유자의 모든 File을 Paging 처리해서 로드합니다. /// </summary> /// <param name="ownerCode">소유자 (부서|사원|그룹) 의 코드</param> /// <param name="ownerKind">소유자의 종류 (부서|사원|그룹 등)</param> /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param> /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param> /// <param name="orders">정렬 순서</param> /// <returns></returns> public IPagingList<File> GetPageOfFileByOwner(string ownerCode, ActorKinds? ownerKind, int pageIndex, int pageSize, params INHOrder<File>[] orders) { ownerCode.ShouldNotBeWhiteSpace("ownerCode"); if(IsDebugEnabled) log.Debug(@"지정한 소유자의 모든 File을 Paging 처리해서 로드합니다... ownerCode={0}, ownerKind={1}, pageIndex={2}, pageSize={3}, orders={4}", ownerCode, ownerKind, pageIndex, pageSize, orders); var query = BuildQueryOverOfFile(null, null, null, ownerCode, ownerKind, null, null, null, null, null); return Repository<File>.GetPage(pageIndex, pageSize, query, orders); }
/// <summary> /// 그룹-구성원(GroupActor) 정보를 조회하기 위한 QueryOver를 빌드합니다 /// </summary> /// <param name="companyCode">회사코드</param> /// <param name="groupCode">그룹 코드</param> /// <param name="actorCode">소속원 코드</param> /// <param name="actorKind">소속원 종류 (회사|부서|사용자 등)</param> public static QueryOver<GroupActor, GroupActor> BuildQueryOverOfGroupActor(string companyCode, string groupCode, string actorCode, ActorKinds? actorKind) { if(IsDebugEnabled) log.Debug(@"그룹-구성원(GroupActor) 정보를 조회하기 위한 QueryOver를 빌드합니다... companyCode={0}, groupCode={1}, actorCode={2}, actorKind={3}", companyCode, groupCode, actorCode, actorKind); var query = QueryOver.Of<GroupActor>(); if(companyCode.IsNotWhiteSpace()) query.AddWhere(ga => ga.Id.CompanyCode == companyCode); if(groupCode.IsNotWhiteSpace()) query.AddWhere(ga => ga.Id.GroupCode == groupCode); if(actorCode.IsNotWhiteSpace()) query.AddWhere(ga => ga.Id.ActorCode == actorCode); if(actorKind.HasValue) query.AddWhere(ga => ga.Id.ActorKind == actorKind); return query; }
/// <summary> /// 지정된 그룹에 지정한 actor가 구성원으로 등록되어 있는지 검사한다. /// NOTE: 현재로서는 직접적인 매핑정보만을 수집한다. 즉 그룹에 부서가 구성원이고, 그 부서의 구성원으로서의 직원은 검출하지 못한다. /// </summary> /// <param name="group">그룹 정보</param> /// <param name="actorCode">그룹 소속원 코드 (Actor 코드 : 회사|부서|그룹|사용자 코드)</param> /// <param name="actorKind">그룹 소속원 종류 (사용자|부서| 타 그룹)</param> /// <returns></returns> public bool IsGroupMember(Group group, string actorCode, ActorKinds actorKind) { group.ShouldNotBeNull("group"); if(IsDebugEnabled) log.Debug(@"그룹에 소속된 구성원인지 검사합니다... groupCode={0}, actorCode={1}, actorKind={2}", group.Code, actorCode, actorKind); var isMember = Repository<GroupActor>.Exists(BuildQueryOverOfGroupActor(group, actorCode, actorKind)); if(IsDebugEnabled) log.Debug(@"그룹에 소속된 구성원인가요? IsGroupMember=" + isMember); return isMember; }
/// <summary> /// 즐겨찾기를 조회합니다. DB에 존재하지 않으면 새로 생성합니다. /// </summary> /// <param name="product"></param> /// <param name="company"></param> /// <param name="ownerCode"></param> /// <param name="ownerKind"></param> /// <param name="content"></param> /// <returns></returns> public Favorite GetOrCreateFavorite(Product product, Company company, string ownerCode, ActorKinds ownerKind, string content) { var favorite = FindOneFavorite(product, company, ownerCode, ownerKind); if(favorite != null) return favorite; lock(_syncLock) { using(UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork)) { CreateFavorite(product, company, ownerCode, ownerKind, content); UnitOfWork.Current.TransactionalFlush(); } } favorite = FindOneFavorite(product, company, ownerCode, ownerKind); favorite.AssertExists("favorite"); if(log.IsInfoEnabled) log.Info(@"새로운 즐겨찾기 정보를 생성했습니다. New Favorite = " + favorite); return favorite; }