Skip to content

Commit

Permalink
Merge pull request #9 from 20thcenturygangsta/feature/Tape-api
Browse files Browse the repository at this point in the history
Feature/tape api
  • Loading branch information
junhyeok-18 authored Jan 13, 2023
2 parents 820649d + 3e77d8c commit d4e78c6
Show file tree
Hide file tree
Showing 12 changed files with 278 additions and 10 deletions.
42 changes: 38 additions & 4 deletions src/main/java/com/playlist/cassette/controller/TapeController.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,53 @@
package com.playlist.cassette.controller;

import com.playlist.cassette.dto.tape.TapeListResponseDto;
import com.playlist.cassette.dto.tape.TapeResponseDto;
import com.playlist.cassette.dto.tape.TapeSaveRequestDto;
import com.playlist.cassette.dto.tape.TapeUpdateRequestDto;
import com.playlist.cassette.entity.Tape;
import com.playlist.cassette.handler.response.ResponseHandler;
import com.playlist.cassette.service.TapeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.List;

@RestController
@RequiredArgsConstructor
public class TapeController {

private final TapeService tapeService;

@GetMapping("/tape/{id}")
public ResponseEntity<Object> getTape(@PathVariable("id") String id) {
Long tapeId = Long.valueOf(id);
TapeResponseDto tape = tapeService.getTape(tapeId);
//List<TapeListResponseDto> tape = tapeService.getTape(tapeId);
return ResponseHandler.generateResponse(HttpStatus.OK, tape);
}

@PostMapping("/tape")
public ResponseEntity<Object> createTape(TapeSaveRequestDto requestDto) {
TapeResponseDto tape = tapeService.createTape(requestDto);

return ResponseHandler.generateResponse(HttpStatus.OK, tape);
}

@PutMapping("/tape/{id}")
public ResponseEntity<Object> updateTape(@PathVariable("id") String id,
TapeUpdateRequestDto requestDto) {
Long tapeId = Long.valueOf(id);
TapeResponseDto tape = tapeService.updateTape(tapeId, requestDto);
return ResponseHandler.generateResponse(HttpStatus.OK, tape);
}

@GetMapping(path = "/tape/download/{id}")
public ResponseEntity<byte[]> downloadTape(@PathVariable("id") String id) throws IOException {
Long tapeId = Long.valueOf(id);
return tapeService.downloadTape(tapeId, "audio");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.playlist.cassette.dto.tape;

import com.playlist.cassette.dto.track.TrackResponseDto;
import com.playlist.cassette.entity.Tape;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TapeListResponseDto {
private Long memberId;
private String colorCode;
private String name;
private String tapeLink;
private String audioLink;
private List<TrackResponseDto> trackResponseDtos;

public TapeListResponseDto(Tape tape) {
this.memberId = tape.getMemberId();
this.colorCode = tape.getColorCode();
this.name = tape.getName();
this.tapeLink = tape.getTapeLink();
this.audioLink = tape.getAudioLink();
}
}
26 changes: 26 additions & 0 deletions src/main/java/com/playlist/cassette/dto/tape/TapeResponseDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.playlist.cassette.dto.tape;

import com.playlist.cassette.entity.Tape;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TapeResponseDto {
private Long memberId;
private String colorCode;
private String name;
private String tapeLink;
private String audioLink;

@Builder
public TapeResponseDto(Tape tape) {
this.memberId = tape.getMemberId();
this.colorCode = tape.getColorCode();
this.name = tape.getName();
this.tapeLink = tape.getTapeLink();
this.audioLink = tape.getAudioLink();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.playlist.cassette.dto.tape;

import com.playlist.cassette.entity.Tape;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TapeSaveRequestDto {
private String memberId;
private String colorCode;
private String name;

@Builder
public TapeSaveRequestDto(String memberId, String colorCode, String name) {
this.memberId = memberId;
this.colorCode = colorCode;
this.name = name;
}

public Tape toEntity() {
return Tape.builder()
.memberId(Long.valueOf(memberId))
.colorCode(colorCode)
.name(name)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.playlist.cassette.dto.tape;

import com.playlist.cassette.entity.Tape;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class TapeUpdateRequestDto {
private String colorCode;
private String name;

@Builder
public TapeUpdateRequestDto(String colorCode, String name) {
this.colorCode = colorCode;
this.name = name;
}

public Tape toEntity() {
return Tape.builder()
.colorCode(colorCode)
.name(name)
.build();
}
}
4 changes: 0 additions & 4 deletions src/main/java/com/playlist/cassette/entity/Color.java

This file was deleted.

42 changes: 41 additions & 1 deletion src/main/java/com/playlist/cassette/entity/Tape.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,44 @@
package com.playlist.cassette.entity;

public class Tape {
import com.playlist.cassette.utils.RandomStringUtils;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Tape extends BaseAuditEntity {

private static final int TAPE_LINK_LENGTH = 6;

@Id
@GeneratedValue
@Column(name = "tape_id")
private Long id;
private Long memberId;
private String colorCode;
private String name;
private String tapeLink;
private String audioLink;

@Builder
public Tape(Long memberId, String colorCode, String name, String audioLink) {
this.memberId = memberId;
this.colorCode = colorCode;
this.name = name;
this.tapeLink = RandomStringUtils.getRandomString(TAPE_LINK_LENGTH);
this.audioLink = audioLink;
}

public void update(String colorCode, String name) {
this.colorCode = colorCode;
this.name = name;
}

public void updateAudioLink(String audioLink) {
this.audioLink = audioLink;
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/playlist/cassette/entity/Track.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Track extends BaseAuditEntity{
public class Track extends BaseAuditEntity {

@Id
@GeneratedValue
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.playlist.cassette.repository;

import com.playlist.cassette.entity.Tape;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TapeRepository extends JpaRepository<Tape, Long> {
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.playlist.cassette.repository;

import com.playlist.cassette.dto.track.TrackResponseDto;
import com.playlist.cassette.entity.Track;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
Expand Down
47 changes: 47 additions & 0 deletions src/main/java/com/playlist/cassette/service/TapeService.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,54 @@
package com.playlist.cassette.service;

import com.playlist.cassette.dto.tape.TapeListResponseDto;
import com.playlist.cassette.dto.tape.TapeResponseDto;
import com.playlist.cassette.dto.tape.TapeSaveRequestDto;
import com.playlist.cassette.dto.tape.TapeUpdateRequestDto;
import com.playlist.cassette.dto.track.TrackResponseDto;
import com.playlist.cassette.entity.Tape;
import com.playlist.cassette.repository.TapeRepository;
import com.playlist.cassette.repository.TrackRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.List;

@RequiredArgsConstructor
@Service
public class TapeService {

private final TapeRepository tapeRepository;
private final TrackRepository trackRepository;

public TapeResponseDto getTape(Long id) {
Tape tape = tapeRepository.findById(id).orElseThrow(() ->
new IllegalArgumentException("Tape이 없습니다."));

return TapeResponseDto.builder().tape(tape).build();
}

public TapeResponseDto createTape(TapeSaveRequestDto requestDto) {
Tape tape = tapeRepository.save(requestDto.toEntity());

return TapeResponseDto.builder().tape(tape).build();
}

public TapeResponseDto updateTape(Long id, TapeUpdateRequestDto requestDto) {
Tape tape = tapeRepository.findById(id).orElseThrow(() ->
new IllegalArgumentException("Tape이 없습니다."));

tape.update(requestDto.getColorCode(), requestDto.getName());
tapeRepository.save(tape);

return TapeResponseDto.builder().tape(tape).build();
}

public ResponseEntity<byte[]> downloadTape(Long id, String dirName) throws IOException {
//List<TrackResponseDto> track = (List<TrackResponseDto>) trackRepository.findByTapeId(id);

return new ResponseEntity<>(HttpStatus.OK);
}
}
29 changes: 29 additions & 0 deletions src/main/java/com/playlist/cassette/utils/RandomStringUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.playlist.cassette.utils;

import java.util.Random;

public abstract class RandomStringUtils {

private static final Random random = new Random();
public static String getRandomString(int length) {
StringBuffer newWord = new StringBuffer();
for(int i = 0; i < length; i++) {
int choice = random.nextInt(3);
switch(choice) {
case 0:
newWord.append((char)((int)random.nextInt(25)+97));
break;
case 1:
newWord.append((char)((int)random.nextInt(25)+65));
break;
case 2:
newWord.append((char)((int)random.nextInt(10)+48));
break;
default:
break;
}
}

return newWord.toString();
}
}

0 comments on commit d4e78c6

Please sign in to comment.