Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package devkor.com.teamcback.domain.ble.controller;

import devkor.com.teamcback.domain.ble.dto.request.CreateBLEReq;
import devkor.com.teamcback.domain.ble.dto.response.CreateBLERes;
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import devkor.com.teamcback.domain.ble.service.AdminBLEService;
import devkor.com.teamcback.global.response.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/admin/ble")
public class AdminBLEController {
private final AdminBLEService adminBLEService;

@PostMapping
@Operation(summary = "BLE장비 생성",
description = "BLE장비 생성")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
@ApiResponse(responseCode = "404", description = "장비를 찾을 수 없습니다.",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
@ApiResponse(responseCode = "401", description = "권한이 없습니다.",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
})
public CommonResponse<CreateBLERes> createBLE(
@Parameter(description = "BLE장비 생성 요청 dto") @Valid @RequestBody CreateBLEReq createBLEReq) {
return CommonResponse.success(adminBLEService.CreateBLEDevice(createBLEReq));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package devkor.com.teamcback.domain.ble.controller;

import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
import devkor.com.teamcback.domain.ble.dto.response.GetBLERes;
import devkor.com.teamcback.domain.ble.dto.response.UpdateBLERes;
import devkor.com.teamcback.domain.ble.service.BLEService;
import devkor.com.teamcback.global.response.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/ble")

public class BLEController {
private final BLEService bleService;

/***
*
* @param placeId BLE정보를 얻고자 하는 place Id
*/
@GetMapping
@Operation(summary = "placeId를 통한 BLE device 상태 요청",
description = "placeId를 통한 BLE device 상태 요청")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
@ApiResponse(responseCode = "404", description = "Not Found",
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
})
public CommonResponse<GetBLERes> getBLE(
@Parameter(name="placeId", description = "BLE 정보를 얻고자 하는 placeId")
@RequestParam Long placeId) {
return CommonResponse.success(bleService.getBLE(placeId));
}

@PutMapping
public CommonResponse<UpdateBLERes> updateBLE(
@Valid @RequestBody UpdateBLEReq updateBLEReq){
return CommonResponse.success(bleService.updateBLEDevice(updateBLEReq));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package devkor.com.teamcback.domain.ble.dto.request;

import devkor.com.teamcback.domain.ble.entity.BLEstatus;
import devkor.com.teamcback.domain.place.entity.Place;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalTime;

@Schema(description = "BLEdevice 생성 정보")
@Getter
@Setter
public class CreateBLEReq {
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
private String deviceName;
@Schema(description ="라운지 place")
private Long placeId;
@Schema(description = "라운지별 최대정원", example = "20")
private int capacity;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package devkor.com.teamcback.domain.ble.dto.request;

import com.fasterxml.jackson.annotation.JsonFormat;
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

@Schema(description = "BLEdevice 수정 정보")
@Getter
@Setter
public class UpdateBLEReq {
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
private String deviceName;
@Schema(description = "최근 감지 인원", example = "10")
private int lastCount;
@Schema(description = "최근 신호 전송 시간")
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
private LocalDateTime lastTime;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package devkor.com.teamcback.domain.ble.dto.response;

import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;

@Schema(description = "BLEdevice 생성 정보")
@Getter
public class CreateBLERes {
private Long id;

public CreateBLERes(BLEDevice bleDevice) {
this.id = bleDevice.getId();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package devkor.com.teamcback.domain.ble.dto.response;

import devkor.com.teamcback.domain.ble.entity.BLEData;
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
import lombok.Getter;

import java.time.LocalDateTime;

@Getter
public class GetBLERes {
private Long id;
private String deviceName;
private Long placeId;
private int capacity;
private int lastCount;
private int lastStatus;
private LocalDateTime lastTime;

public GetBLERes(BLEDevice device, BLEData data, BLEstatus status) {
this.id = device.getId();
this.deviceName = device.getDeviceName();
this.placeId = device.getPlace().getId();
this.capacity = device.getCapacity();
this.lastCount = data.getLastCount();
this.lastStatus = status.getCode();
this.lastTime = data.getLastTime();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package devkor.com.teamcback.domain.ble.dto.response;

import devkor.com.teamcback.domain.ble.entity.BLEData;
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;

import java.time.LocalDateTime;

@Getter
public class UpdateBLERes {
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
private Long deviceId;
@Schema(description = "최근 감지 인원", example = "10")
private int lastCount;
@Schema(description = "최근 Status", example = "AVAILABLE")
private BLEstatus lastStatus;
@Schema(description = "최근 신호 전송 시간")
private LocalDateTime lastTime;

public UpdateBLERes(BLEData data) {
this.deviceId = data.getDevice().getId();
this.lastCount = data.getLastCount();
this.lastStatus = data.getLastStatus();
this.lastTime = data.getLastTime();
}
}
36 changes: 36 additions & 0 deletions src/main/java/devkor/com/teamcback/domain/ble/entity/BLEData.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package devkor.com.teamcback.domain.ble.entity;


import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDateTime;

@Entity
@Table(name="tb_ble_data")
@Getter
@Setter
@NoArgsConstructor
public class BLEData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "device_id", nullable = false)
private BLEDevice device;

@Column
private Integer lastCount;

@Enumerated(EnumType.ORDINAL)
@Column
private BLEstatus lastStatus;

@Column(nullable = false)
private LocalDateTime lastTime;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package devkor.com.teamcback.domain.ble.entity;


import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
import devkor.com.teamcback.domain.common.entity.BaseEntity;
import devkor.com.teamcback.domain.place.entity.Place;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDateTime;

@Entity
@Table(name="tb_ble_device")
@Getter
@Setter
@NoArgsConstructor
public class BLEDevice extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(nullable = false, unique = true)
private String deviceName;

@OneToOne
@JoinColumn(name = "placeId")
private Place place;

@Column
private int capacity;

public BLEDevice(String deviceName, Place place, int capacity) {
this.deviceName = deviceName;
this.place = place;
this.capacity = capacity;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package devkor.com.teamcback.domain.ble.entity;


import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum BLEstatus {
VACANT(0, "여유"),
AVAILABLE(1, "보통"),
CROWDED(2, "포화"),
FAILURE(3, "신호없음");

private final int code;
private final String label;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package devkor.com.teamcback.domain.ble.repository;

import devkor.com.teamcback.domain.ble.entity.BLEData;
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.CrudRepository;

import java.util.Optional;

public interface BLEDataRepository extends JpaRepository<BLEData, Long> {
Optional<BLEData> findTopByDeviceOrderByLastTimeDesc(BLEDevice device);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package devkor.com.teamcback.domain.ble.repository;

import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import devkor.com.teamcback.domain.place.entity.Place;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface BLEDeviceRepository extends JpaRepository<BLEDevice, Long> {
List<BLEDevice> findByDeviceName(String deviceName);
List<BLEDevice> findByPlace(Place place);
boolean existsByDeviceName(String deviceName);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package devkor.com.teamcback.domain.ble.service;

import devkor.com.teamcback.domain.ble.dto.request.CreateBLEReq;
import devkor.com.teamcback.domain.ble.dto.response.CreateBLERes;
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
import devkor.com.teamcback.domain.ble.repository.BLEDeviceRepository;
import devkor.com.teamcback.domain.place.entity.Place;
import devkor.com.teamcback.domain.place.repository.PlaceRepository;
import devkor.com.teamcback.global.exception.exception.GlobalException;
import devkor.com.teamcback.global.response.ResultCode;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import static devkor.com.teamcback.global.response.ResultCode.NOT_FOUND_PLACE;

@Service
@RequiredArgsConstructor
public class AdminBLEService {
private final BLEDeviceRepository bleDeviceRepository;
private final PlaceRepository placeRepository;

@Transactional
public CreateBLERes CreateBLEDevice(CreateBLEReq createBLEReq) {
Place place = placeRepository.findById(createBLEReq.getPlaceId()).orElseThrow(() -> new GlobalException(NOT_FOUND_PLACE));
if (bleDeviceRepository.existsByDeviceName(createBLEReq.getDeviceName())) throw new GlobalException(ResultCode.EXISTING_DEVICE_NAME);
BLEDevice bleDevice = bleDeviceRepository.save(new BLEDevice(createBLEReq.getDeviceName(), place, createBLEReq.getCapacity()));
return new CreateBLERes(bleDevice);
}
}
Loading