Skip to content

Commit

Permalink
Merge pull request #171 from teamterning/develop
Browse files Browse the repository at this point in the history
[🔀 merge] [2차] 코드 리펙토링 사항 적용 (10)
  • Loading branch information
JungYoonShin authored Nov 1, 2024
2 parents b2cdf13 + 69fc92d commit 9acb3ee
Show file tree
Hide file tree
Showing 11 changed files with 173 additions and 14 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/DOCKER-CD.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: DOCKER-CD
on:
pull_request:
push:
branches: [ "main" ]

jobs:
Expand Down
39 changes: 26 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
# 💚 Team-Terning (터닝)
> NOW SOPT 34 APPJAM DEMODAY 최우수상 수상작
> NOW SOPT 34 APPJAM DEMODAY 최우수상 수상작
![image](https://github.com/user-attachments/assets/b5ba8653-c30b-4ad7-afa3-5083dc001581)

- Behance URL : https://www.behance.net/gallery/209714965/terning-College-Internship-App
- 앱 소개 URL : https://terning.framer.website/

### 내 계획에 딱 맞는 대학생 인턴의 시작, 터닝 (terning)

> 취업을 위한 필수 관문이자 대학생으로서 쌓을 수 있는 최고의 스펙, 인턴. <br/> 팀 터닝포인트는 대학생이 세운 계획에 딱 맞는 인턴 공고를 추천해주고, 인턴 지원 일정을 효율적으로 관리하는 방안에 대해 고민합니다. <br/> 터닝에서 나만의 인턴 계획을 등록하고, 딱 맞는 인턴 공고를 추천 받아보세요!
> 인턴은 취업 전 전공 관련 실무 경험을 쌓을 수 있을 뿐만 아니라 취업 시장에서 중요한 평가 요소로 자리하고 있습니다. <br/> 하지만 채용 플랫폼에는 졸업자와 경력자를 위한 공고만 가득할 뿐, 대학생을 대상으로 한 인턴 공고만을 모아 탐색하기에는 어렵고 복잡하기만 합니다. <br/> <br/> 터닝에서는 **대학생이 세운 계획에 딱 맞는 공고를 모아볼 수 있고, 인턴 지원 일정까지 효율적으로 관리할 수 있는 서비스**를 제공합니다. <br/> 나만의 인턴 계획이 있는 대학생이라면, 지금 바로 터닝으로 대학생 인턴을 시작해보세요.
<br/>

## 🪴 터닝의 핵심기능을 소개합니다

1. 터닝은 간단한 세가지 문답만으로 나만의 대학생 인턴 계획을 입력할 수 있어요.
2. 내 학년에 맞는 공고와 내가 희망하는 근무 기간에 맞는 인턴 공고가 무엇인지 추천 받으세요.
3. 내 계획에 딱 맞는 인턴 공고를 나만의 커스텀 캘린더로 스크랩하고 관리해보세요.
4. 내가 관심 있는 공고 중 오늘 마감되는 공고를 리마인드 받아보세요.
**Solution 01. 오직 대학생 인턴만 모아볼 수 있도록**
- 간편한 온보딩 : 세가지 질문에 대한 대답만으로 간단하게 내 인턴 계획을 세울 수 있어요
- 맞춤형 공고 확인 : 홈 화면에서 내 계획에 맞게 필터링된 공고만 쉽고 빠르게 확인할 수 있어요
- 마감 공고 리마인드 : 더 이상 지원 마감을 놓치지 않도록 일주일 내 마감되는 관심 공고를 알려드릴게요

**Solution 02. 캘린더에서 효율적으로 인턴 지원 일정을 관리할 수 있도록**
- 다양한 스크랩 색상 : 나만의 기준에 따라 공고를 스크랩하고 여러가지 색상으로 캘린더를 채워보세요
- 날짜별 리스트 제공 : 캘린더에 스크랩한 공고를 리스트 형식으로도 볼 수 있어요
- 공고 상세 페이지 : 캘린더에서도 깔끔하게 요약된 스크랩 공고 정보를 바로 확인할 수 있어요

<br/>

Expand Down Expand Up @@ -93,11 +99,15 @@ ex) feat/#20
<br/>

## 🌱 Architecture Diagram
![터닝 AD](https://github.com/user-attachments/assets/966b11f8-f8d9-4a1e-b9db-19bf20c2fa82)

<img width="750" alt="image" src="https://github.com/user-attachments/assets/0bf49d8a-bcfa-4810-87ca-734e2b3a2d71">

<br/>

## 🪴 IA
<img width="1024" alt="image" src="https://github.com/user-attachments/assets/0dac17fd-5950-4f47-95d1-d2aa261bdfa5">

<br/><br/>

## 📎 ERD
![image](https://github.com/user-attachments/assets/d4ef76d7-d1fb-41e2-9a53-10012fe797ea)

Expand All @@ -115,6 +125,7 @@ ex) feat/#20
├── 📂 src/main/java/org/terning/terningserver
│ ├── 📂 config
│ ├── 📂 controller
│ │ └── 📂 swagger // Swagger 설정 파일 분리
│ ├── 📂 repository
│ ├── 📂 domain
│ │ ├── 📂 common // ex) BaseEntity.java
Expand All @@ -129,9 +140,11 @@ ex) feat/#20
│ │ └── 📂 post // 도메인(2)
│ │ ├── 📂 request
│ │ └── 📂 response
│ └── 📂 exception
│ ├── 📂 dto // ex) ErrorResponse, SuccessResponse
│ ├── 📂 enums // ex) ErrorMessage, SuccessMessage
│ └── CustomException.java, GlobalExceptionHandler.java
│ ├── 📂 exception
│ │ ├── 📂 dto // ex) ErrorResponse, SuccessResponse
│ │ ├── 📂 enums // ex) ErrorMessage, SuccessMessage
│ │ └── CustomException.java, GlobalExceptionHandler.java
│ ├── 📂 jwt
│ └── 📂 util
└── ServerApplication.java
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package org.terning.terningserver.controller;


import lombok.RequiredArgsConstructor;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import org.terning.terningserver.controller.swagger.BannerSwagger;
import org.terning.terningserver.dto.Banner.BannerListResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;
import org.terning.terningserver.exception.enums.SuccessMessage;
import org.terning.terningserver.service.BannerService;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1")
public class BannerController implements BannerSwagger{

private final BannerService bannerService;

@GetMapping("/search/banners")
public ResponseEntity<SuccessResponse<BannerListResponseDto>> getBanners() {
return ResponseEntity.ok(
SuccessResponse.of(SuccessMessage.SUCCESS_GET_BANNERS, bannerService.getBanners())
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.terning.terningserver.controller.swagger;


import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;

import org.springframework.http.ResponseEntity;

import org.terning.terningserver.dto.Banner.BannerListResponseDto;
import org.terning.terningserver.exception.dto.SuccessResponse;

@Tag(name= "Banner", description = "탐색 > 배너 조회 관련 API")
public interface BannerSwagger {

@Operation(summary = "배너 조회", description = "탐색 > 배너를 조회하는 API")
ResponseEntity<SuccessResponse<BannerListResponseDto>> getBanners();

}
27 changes: 27 additions & 0 deletions src/main/java/org/terning/terningserver/domain/Banner.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.terning.terningserver.domain;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.NoArgsConstructor;

import static jakarta.persistence.GenerationType.IDENTITY;
import static lombok.AccessLevel.PROTECTED;

@Entity
@Getter
@NoArgsConstructor(access = PROTECTED)
public class Banner {

@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;

private String imageUrl;

private String link;

private int priority;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package org.terning.terningserver.dto.Banner;

import org.terning.terningserver.domain.Banner;

import java.util.List;

public record BannerListResponseDto(
List<BannerDetailResponseDto> banners
) {

public record BannerDetailResponseDto(
String imageUrl,
String link
) {
public static BannerDetailResponseDto of(final Banner banner) {
return new BannerDetailResponseDto(banner.getImageUrl(), banner.getLink());
}
}

public static BannerListResponseDto of(final List<Banner> banners) {
return new BannerListResponseDto(
banners.stream().map(BannerDetailResponseDto::of).toList()
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
@Getter
@AllArgsConstructor
public enum SuccessMessage {

// 홈 화면
SUCCESS_GET_ANNOUNCEMENTS(200, "인턴 공고 불러오기를 성공했습니다"),
SUCCESS_GET_UPCOMING_ANNOUNCEMENTS(200, "곧 마감인 인턴 공고 요청을 성공했습니다"),
Expand Down Expand Up @@ -35,6 +36,7 @@ public enum SuccessMessage {
SUCCESS_GET_MOST_VIEWED_ANNOUNCEMENTS(200, "탐색 > 조회수 많은 공고를 조회하는데 성공했습니다"),
SUCCESS_GET_MOST_SCRAPPED_ANNOUNCEMENTS(200, "탐색 > 스크랩 수 많은 공고를 조회하는데 성공했습니다"),
SUCCESS_GET_SEARCH_ANNOUNCEMENTS(200, "검색에 성공했습니다"),
SUCCESS_GET_BANNERS(200, "탐색 뷰 > 배너 조회에 성공했습니다"),

// 인턴 공고
SUCCESS_GET_INTERNSHIP_DETAIL(200, "공고 상세 정보 불러오기에 성공했습니다"),
Expand All @@ -57,6 +59,7 @@ public enum SuccessMessage {
SUCCESS_GET_PROFILE(200, "마이페이지 > 프로필 정보 불러오기를 성공했습니다"),
SUCCESS_UPDATE_PROFILE(200, "프로필 수정에 성공했습니다");


private final int status;
private final String message;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package org.terning.terningserver.repository.Banner;

import org.springframework.data.repository.Repository;
import org.terning.terningserver.domain.Banner;

import java.util.List;

public interface BannerRepository extends Repository<Banner, Long> {

List<Banner> findAllByOrderByPriority();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.terning.terningserver.service;

import org.terning.terningserver.dto.Banner.BannerListResponseDto;

public interface BannerService {

public BannerListResponseDto getBanners();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package org.terning.terningserver.service;

import org.springframework.stereotype.Service;
import org.terning.terningserver.domain.Banner;
import org.terning.terningserver.dto.Banner.BannerListResponseDto;
import org.terning.terningserver.repository.Banner.BannerRepository;

import lombok.RequiredArgsConstructor;

import java.util.List;


@Service
@RequiredArgsConstructor
public class BannerServiceImpl implements BannerService {

private final BannerRepository bannerRepository;

public BannerListResponseDto getBanners() {
List<Banner> banners = bannerRepository.findAllByOrderByPriority();
return BannerListResponseDto.of(banners);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ public List<MonthlyListResponseDto> getMonthlyScrapsAsList(Long userId, int year
))
.toList();
}

@Override
public List<DailyScrapResponseDto> getDailyScraps(Long userId, LocalDate date) {
return scrapRepository.findScrapsByUserIdAndDeadlineOrderByDeadline(userId, date).stream()
Expand Down

0 comments on commit 9acb3ee

Please sign in to comment.