chzzk-study / grass-diary-server Goto Github PK
View Code? Open in Web Editor NEW취지직 2팀 프로젝트 Grass Diary Server
취지직 2팀 프로젝트 Grass Diary Server
localhost
에서도 가능하도록 설정 추가html 태그의 경우 어떻게 잘라서 보낼지 고민이 필요해 보임
일기 전송의 경우 전부 필요한 일이므로 해당 일을 하는 위치가 중요할 것 같음
api/main/grass
내 전송하는 데이터 수정 및 추가{
"count": "int"
"GrassInfoDTO": "list"
}
{
"totalCount": "int"
"thisMonthCount": "int"
"GrassInfoDTO": "list"
}
서버에서 이미지를 보내줄 수 있는 방법은 2가지를 고민해 볼 수 있다.
이미지의 경우 요청을 AWS S3로 하는 것이 맞다고는 생각되나, AWS S3 프리티어의 경우 한도가 다음과 같다.
때문에 쉽게 과금이 될 수도 있을 것 같아 고민해봐야 할 부분 같다.
{
"date": "String",
"todayQuestion": "String"
}
{
"year": "int",
"month": "int",
"date": "int",
"day": "String",
"todayQuestion": "String"
}
오늘의 날짜
api/main/today-date
{
"year": "int",
"month": "int",
"date": "int",
"day": "String"
}
오늘의 질문
api/diary/today-question
{
"question": "String"
}
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity extends BaseCreatedTimeEntity {
@LastModifiedDate
private LocalDateTime updatedAt;
}
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Diary extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "diary_id")
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
@Column(columnDefinition = "TEXT")
private String content;
@ColumnDefault("true")
private Boolean isPrivate;
@OneToMany(mappedBy = "diary")
private List<DiaryLike> diaryLikes = new ArrayList<>();
@ColumnDefault("false")
private Boolean hasImage;
@ColumnDefault("false")
private Boolean hasTag;
@Enumerated(EnumType.STRING)
private ConditionLevel conditionLevel;
@ColumnDefault("0")
private int likeCount;
@Builder
protected Diary(Member member, String content, Boolean isPrivate, Boolean hasImage,
Boolean hasTag, ConditionLevel conditionLevel) {
this.member = member;
this.content = content;
this.isPrivate = isPrivate;
this.hasImage = hasImage;
this.hasTag = hasTag;
this.conditionLevel = conditionLevel;
this.setCreatedAt(LocalDateTime.now());
this.likeCount = 0;
}
public void update(String content, Boolean isPrivate, Boolean hasImage, Boolean hasTag,
ConditionLevel conditionLevel) {
this.content = content;
this.isPrivate = isPrivate;
this.hasImage = hasImage;
this.hasTag = hasTag;
this.conditionLevel = conditionLevel;
}
public void addDiaryLike(DiaryLike diaryLike) {
diaryLikes.add(diaryLike);
diaryLike.setDiary(this);
incrementLikeCount();
}
public void deleteDiaryLike(DiaryLike diaryLike) {
diaryLikes.removeIf(dl -> dl.getId().equals(diaryLike.getId()));
// diaryLike.setDiary(null);
decrementLikeCount();
}
public void incrementLikeCount() {
this.likeCount += 1;
}
public void decrementLikeCount() {
this.likeCount -= 1;
}
}
@LastModifiedDate 어노테이션이 붙은 updatedAt 필드는 JPA의 Auditing 기능을 이용해서 엔티티의 어떤 필드라도 변경이 일어났을 때 자동으로 업데이트 시간을 현재 시간으로 변경해 줍니다. 이는 보통 데이터의 일관성과 역추적을 위해 매우 유용하지만, 특정 필드(예: likeCount)의 변경을 추적 대상에서 제외하고 싶은 경우에는 문제가 될 수 있습니다.
이를 해결하기 위해서 3가지 방법이 있습니다.
그러나 이미 양방향 연결관계가 설정되어있는점, 이를 활용하면 적은 양의 코드 변경을 통해 오류를 수정할 수 있는 점, 유저가 아직 별로 없는 저희 서비스를 고려했을 때 3번 방법이 적절하다고 생각해 likeCount를 삭제하려고 합니다.
서버의 인증 정보를 .env
파일에 저장 후 사용하도록 배포
Elastic search
memberId
→ JWT
사용오류 내보낼 때 “좋아요를 이미 눌렀습니다” 와 같이 명확하게 내보내고, 400에러를 내보낼 수 있도록 rest api에서 error를 핸들링 하는 방법 알아보고 적용하기
리워드를 받거나 사용했을 때 reward_history DB 값이 추가 되어야 한다.
현재 tagUsageCount
: 모든 사용자가 작성한 태그에 해당하는 개수
/api/search/hashTag/{memberId}
이 API에 해당 사용자가 작성한 특정 해시태그의 개수 추가 필요
-> 필요한 정보: 각 사용자의 해시태그에 대한 일기 개수
*배포 브랜치 네이밍 수정
에러 메시지를 기술적인 지식이 없는 사람도 이해하고 액션을 취하기 쉽게 만들어야 한다.
관련해서 서버에도 로그를 최대한 많이 심어두면 문제 해결이 쉬워 질 것이다.
이는 의사소통의 능력이며 내가 만든 결과물로 인해 고생할지도 모르는 사람들을 고려한 개발을 해야한다.
문자열 관련, 랜덤 값 생성, 날짜 및 시간 처리 등 프로젝트 전역에서 사용되는 특정 로직이나 독립적인 기능을 구현한다.
참고
오늘의 질문
리스트를 위한 테이블 생성 및 데이터 삽입A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.