kkn1125 / narang

감정케어 웹서비스
https://narang.ml
1 stars 1 forks source link

[FE/BE] 공통 규칙 #112

Open kkn1125 opened 2 years ago

kkn1125 commented 2 years ago

FE/BE 코드 규칙 설정

공통 사항

  1. 모델 객체 필드 값은 디폴트 값 없이 사용하는 것을 원칙으로 한다. (데이터 value를 의도적으로 제한하기 위함)
  2. 디폴트를 제거하는 다른 이유 : 부득이 null값이 들어가야할 때가 있다. 그럴 때 null값을 다른 값으로 디폴트 처리하면 코드 작업이 더 딜레이 될 것으로 생각하여 판단 함.

FE 공통 규칙

프론트에 생성하는 객체는 데이터를 주고 받는 그릇으로 활용하기 위해 생성. 공통으로 사용하는 함수를 개발해야 api개발에 사용할 때 편의성을 증대 시킬 수 있다. 유지보수성을 높히기 위한 이유도 포함.

Model

IModel의 개념

interface Model을 의미한다.

interface로서 모든 클래스에 필요한 공통의 함수명과 인자, 반환 값을 지정한다.

PModel의 개념

extends 하여 사용하기 위한 클래스로 공통으로 타입에 관계없이 사용할 수 있도록 확장하여 활용하기 위한 목적으로 만들어졌다.

// IModel과 PModel을 상속한 예시 코드
class User extends PModel implements IModel {
  private nickName: ModelStringValue;
  //...

  public set(column: UserColumn, value: ModelValue) {
    // ...
  }
}

API

api는 아래 규칙을 따른다.

  1. api 작업 시 #41 의 내용을 토대로 생성하며, 수정 사항 발생 시 정리하여 #41 에 추가로 코멘트를 생성한다.
  2. 수정사항은 백엔드 restController와 충분히 테스트 및 검토 후 반영한다.
  3. 함수 명칭은 MongoRepository 기준으로 하며 예시는 다음과 같다.
    const findUserAll () { /* ... */ }
    const findUserById (id: string) { /* ... */ }
    const findDiaryByUid (uid: string) { /* ... */ }
    const insertUser (user: User) { /* ... */ }
    const updateUser (user: User) {
    const formData = user.makeFormData();
    return axios.put('/api/user', formData)
      .then(handleReceiveData)
      .catch(handleReceiveError);
    }
    const deleteUserById (id: string) { /* ... */ }

BE 공통 규칙

Entity 클래스

Repository

기본적으로 단순한 findAll, findById, insert, deleteById는 ClassNameRepository에서 사용하고, 쿼리문이 필요한 함수만 커스터마이징하여 사용한다.

Service

함수 명칭은 ClassNameRepositoryCustomImpl, ClassNameService, ClassNameRestController 모두 동일하게 처리한다. 예를 들면 다음과 같다.

// DiaryRepositoryCustomImpl
class DiaryRepositoryCustomImpl implements DiaryRepositoryCustom {
  private MongoTemplate diaryTemplate;

  @Autowired
  DiaryRepositoryCustomImpl(MongoTemplate diaryTemplate) {
    this.diaryTemplate = diaryTemplate;
  }

  public Optional<User> findByUid (String uid) {
    Criteria cr = new Criteria("uid").is(uid);
    Query q = new Query(cr);
    return diaryTemplate.findOne(q, Diary.class);
  }
}

// DiaryService
@Service
class DiaryService {
  private DiaryRepository diaryRepository;

  @Autowired
  DiaryRepositoryCustomImpl(DiaryRepository diaryRepository) {
    this.diaryRepository= diaryRepository;
  }

  public User findByUid (String uid) {
    return diaryRepository.findByUid(uid).orElseThrow();
  }
}

// DiaryRestController
@RestController
@RequestMapping("/api")
class DiaryRestController {
  private DiaryService diaryService;

  @Autowired
  DiaryRepositoryCustomImpl(DiaryService diaryService) {
    this.diaryService= diaryService;
  }

  private String mapper(Object object) throws JsonProcessingException {
    return new ObjectMapper().writeValueAsString(object);
  }

  @GetMapping("/user/uid/{uid}")
  public String findByUid (@PathVariable("uid") String uid) throws JsonProcessingException {
    return mapper(diaryService.findByUid(uid));
  }
}
kkn1125 commented 2 years ago

문제 발생

  1. MongoDB 시간 locale 설정 찾아보기
  2. Java annotation 시간 locale 설정 찾아보기
  3. 시간 조회 테스트 (지금 상황에서)
kkn1125 commented 2 years ago

파일 삭제 내용 #97 참조