Skip to content

Commit

Permalink
#1 - Feat: Add Profile classes
Browse files Browse the repository at this point in the history
  • Loading branch information
umtuk committed Jul 15, 2023
1 parent 4861180 commit 603ce17
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.routemaster.api.auth.domain.user.info.profile.impl.service;

import java.util.List;
import org.routemaster.api.auth.domain.user.info.profile.impl.data.UserProfile;

public interface SecuredUserProfileService {

List<UserProfile> list(Iterable<String> ids);
List<UserProfile> listByBaseUserId(Iterable<String> baseUserIds);
UserProfile details(String id);
UserProfile detailsByBaseUserId(String baseUserId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package org.routemaster.api.auth.domain.user.info.profile.impl.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.routemaster.api.auth.domain.user.info.impl.exception.InfoErrorCode;
import org.routemaster.api.auth.domain.user.info.profile.impl.data.UserProfile;
import org.routemaster.api.auth.domain.user.info.profile.impl.data.UserProfileAccess;
import org.routemaster.api.auth.domain.user.info.profile.impl.exception.UserProfileErrorDescription;
import org.routemaster.api.auth.domain.user.info.profile.impl.service.SecuredUserProfileService;
import org.routemaster.api.auth.domain.user.info.profile.impl.service.UserProfileAccessService;
import org.routemaster.api.auth.domain.user.info.profile.impl.service.UserProfileService;
import org.routemaster.api.auth.domain.user.info.profile.impl.util.mapper.SecuredUserProfileMapper;
import org.routemaster.sdk.exception.data.roe.ROEFactory;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@RequiredArgsConstructor
public class DefaultSecuredUserProfileService implements SecuredUserProfileService {

private final SecuredUserProfileMapper securedUserProfileMapper;

private final UserProfileAccessService userProfileAccessService;
private final UserProfileService userProfileService;

private final ROEFactory roeFactory;

@Override
public List<UserProfile> list(Iterable<String> ids) {
List<UserProfile> origins = userProfileService.list(ids);
Map<String, UserProfile> originMap = new HashMap<>();
for (UserProfile origin : origins) {
originMap.put(origin.getId(), origin);
}

List<UserProfileAccess> accesses = userProfileAccessService.list(ids);
Map<String, UserProfileAccess> accessMap = new HashMap<>();
for (UserProfileAccess access : accesses) {
accessMap.put(access.getId(), access);
}

return list(ids, originMap, accessMap);
}

@Override
public List<UserProfile> listByBaseUserId(Iterable<String> baseUserIds) {
List<UserProfile> origins = userProfileService.listByBaseUserId(baseUserIds);
Map<String, UserProfile> originMap = new HashMap<>();
for (UserProfile origin : origins) {
originMap.put(origin.getBaseUserId(), origin);
}

List<UserProfileAccess> accesses = userProfileAccessService.listByBaseUserId(baseUserIds);
Map<String, UserProfileAccess> accessMap = new HashMap<>();
for (UserProfileAccess access : accesses) {
accessMap.put(access.getBaseUserId(), access);
}

return list(baseUserIds, originMap, accessMap);
}

private List<UserProfile> list(Iterable<String> ids, Map<String, UserProfile> originMap,
Map<String, UserProfileAccess> accessMap) {
List<UserProfile> results = new ArrayList<>();
for (String id : ids) {

if (!originMap.containsKey(id)) {
throw roeFactory.get(
InfoErrorCode.ROE_111,
UserProfileErrorDescription.USER_PROFILE_NOT_FOUND,
HttpStatus.NOT_FOUND
);
}
if (!accessMap.containsKey(id)) {
throw roeFactory.get(
InfoErrorCode.ROE_111,
UserProfileErrorDescription.USER_PROFILE_ACCESS_NOT_FOUND,
HttpStatus.NOT_FOUND
);
}

results.add(details(originMap.get(id), accessMap.get(id)));
}
return results;
}

@Override
public UserProfile details(String id) {
UserProfile origin = userProfileService.details(id);
UserProfileAccess access = userProfileAccessService.details(id);
return details(origin, access);
}

@Override
public UserProfile detailsByBaseUserId(String baseUserId) {
UserProfile origin = userProfileService.detailsByBaseUserId(baseUserId);
UserProfileAccess access = userProfileAccessService.detailsByBaseUserId(baseUserId);
return details(origin, access);
}

private UserProfile details(UserProfile origin, UserProfileAccess access) {
return securedUserProfileMapper.details(origin, access);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.routemaster.api.auth.domain.user.info.profile.impl.util.constant;

public enum ProfileAccessType {

ALL,
FOLLOWERS_ONLY,
RESTRICTED
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.routemaster.api.auth.domain.user.info.profile.impl.util.mapper;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.routemaster.api.auth.domain.user.info.profile.impl.data.UserProfile;
import org.routemaster.api.auth.domain.user.info.profile.impl.data.UserProfileAccess;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@RequiredArgsConstructor
public class SecuredUserProfileMapper {

public UserProfile details(UserProfile origin, UserProfileAccess access) {
return UserProfile.builder()
.id(origin.getId())
.baseUserId(origin.getBaseUserId())
.nickname(origin.getNickname())
.birthDate(access.getBirthDate() ? origin.getBirthDate() : null)
.profileImageUrl(access.getProfileImageUrl() ? origin.getProfileImageUrl() : null)
.createdAt(origin.getCreatedAt())
.updatedAt(origin.getUpdatedAt())
.build();
}
}

0 comments on commit 603ce17

Please sign in to comment.