🖥 목표달성 앱 (해커톤)
- 사용자에게 다양한 카테고리를 기반으로 하켓을 추천해줍니다.
- 무작정 하켓을 추천해주는 것이 아닌 사용자의 지역을 기반으로 관심분야에 맞는 하켓을 추천해 줍니다.
- 다른 사용자의 하켓 중 관심있는 하켓은 공유해 자신의 하켓으로 만들 수 있습니다.
- 해당 하켓을 달성하기 위해 노력한 과정을 사진으로 남깁니다.
- 여태까지 본인이 이룬 하켓들을 다시 볼 수 있습니다.
-
JPA
-
Spring Boot
-
AWS S3
-
Cache
-
Heroku를 이용한 서버 배포.
-
AWS S3와 연동하여 이미지 저장.
-
저장, 조회 등 REST API
-
Kakao SDK를 사용한 소셜 로그인.
- 클라이언트에서 넘어온 토큰의 유효성 검증 및 유저 정보 요청.
-
EhCache를 사용한 로그인 정보 확인.
-
CacheEventListener 과 Slf4j로 캐시 로깅
@Id @GeneratedValue
private Long id;
@Column(nullable = false)
private String nickname;
@Column(nullable = false, unique = true)
private String email;
private String gender;
private String ageRange;
@OneToMany(mappedBy = "account", cascade = CascadeType.REMOVE)
private Set<LikeHeart> likeHearts = new HashSet<>();
@Id @GeneratedValue
private Long id;
@ManyToOne
private Account account;
@Column(nullable = false)
private String title;
private String thumbnailImage;
private String description;
private String hocketSpot;
@Column(nullable = false)
private boolean isPublic;
@Column(nullable = false)
private boolean isRequireDate;
@Column(nullable = false)
private boolean isAchieved;
private LocalDateTime createdDateTime;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private Integer perWeeks;
@OneToMany
private Set<Tag> tags = new HashSet<>();
@OneToMany(mappedBy = "bucket", cascade = CascadeType.REMOVE)
Set<LikeHeart> likeHearts = new HashSet<>();
@Id @GeneratedValue
private Long id;
@ManyToOne
private Account account;
@ManyToOne
private Hocket hocket;
@Id @GeneratedValue
private Long id;
@Column(nullable = false, length = 500, unique = true)
private String url;
@Colum(nullable = false)
private LocalDateTime addDateTime;
@ManyToOne
private Hocket hocket;
@Id @GeneratedValue
private Long id;
@Column(nullable = false, length = 500, unique = true)
private String url;
@ManyToOne
private Hocket hocket;
@Id @GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
private String title;
초기 데이터 home, challenge, hobby, learning, exercise, food, culture, travel, etc
- String token;
- 유효하지 않은 토큰 : ResponseEntity.badRequest()
- 없는 계정 : ResponseEntity.notFound()
- 이메일 비동의 : ResponseEntity.badRequest()
- 성공 : ResponseEntity.ok()
- String token
[return : ResponseEntity]
- 성공 : ResponseEntity.ok()
- String token;
- 이메일 동의, 이름 동의, 연령대 동의
- 성공 : ok()
- 존재하는 이메일 : BadRequest
- 연령대 동의가 안됨 : BadRequest
- 닉네임 동의가 안됨 : BadRequest
- 이메일 동의가 안됨 : BadRequest
- String token;
- 가입 : ok
- 미가입 : NodFound
- String token;
- 성공 :
private Long id;
private String nickname;
private String email;
private String name;
private String gender;
private Integer age;
private String profileImage;
- token에 해당하는 계정 없음 : NotFound
@NotBlank
private String token;
@NotBlank
private String title;
@NotBlank
private boolean isPublic;
@NotBlank
private boolean isAchieved;
@NotBlank
private boolean isRequireDate;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private Integer perWeeks;
private MultipartFile thumbnailImage;
private String description;
private String hocketSpot;
private Set<String> categoryTitles;
- 성공 : ok()
- 유효하지 않은 토큰,가입 되지 않은 회원: badRequest
- String token
@NotBlan
Long id;
@NotBlank
private String title;
@NotBlank
private int numberOfHearts;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private int perWeeks;
- 날짜 지정 x 이면 DateTime == null , perWeeks ==0
- @NotBlank String token;
- @NotBlank String hocketId;
- ImageDto :
- String url
- LocalDateTime addDateTime
- 토큰 유효하지 않거나, 요청 사용자와 하켓 생성자가 일치하지 않아도 null 반환.
- @NotBlank String token;
- @NotBlank String hocketId;
- @NotBlank MultipartFile image;
- 유효하지 않은 토큰, 생성자와 일치하지 않음 : badRequest()
- 성공 : ok()
- String hocketId;
private String title;
private String description;
private String hocketSpot;
private boolean isPublic;
private boolean isRequireDate;
private boolean isAchieved;
private LocalDateTime createdDateTime;
private LocalDateTime startDateTime;
private LocalDateTime endDateTime;
private int perWeeks;
private int numberOfHearts;
private List<String> categoryTitles = new ArrayList<>();
- @NotBlank String token;
- @NotBlank Long hocketId;
- 토큰이 올바르지 않거나 계정 없음 : BadRequest()
- 성공 : ok()
- String category;
- Dto
private String title;
private String thumbnailImage;
private int numberOfHearts;