Skip to content

Commit 73d6479

Browse files
authored
Merge pull request #220 from DevKor-github/feat/ble
Feat: BLE센서 기능 추가
2 parents ded4061 + e342d7c commit 73d6479

File tree

15 files changed

+432
-2
lines changed

15 files changed

+432
-2
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package devkor.com.teamcback.domain.ble.controller;
2+
3+
import devkor.com.teamcback.domain.ble.dto.request.CreateBLEReq;
4+
import devkor.com.teamcback.domain.ble.dto.response.CreateBLERes;
5+
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
6+
import devkor.com.teamcback.domain.ble.service.AdminBLEService;
7+
import devkor.com.teamcback.global.response.CommonResponse;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.Parameter;
10+
import io.swagger.v3.oas.annotations.media.Content;
11+
import io.swagger.v3.oas.annotations.media.Schema;
12+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
13+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
14+
import jakarta.validation.Valid;
15+
import lombok.RequiredArgsConstructor;
16+
import org.springframework.web.bind.annotation.PostMapping;
17+
import org.springframework.web.bind.annotation.RequestBody;
18+
import org.springframework.web.bind.annotation.RequestMapping;
19+
import org.springframework.web.bind.annotation.RestController;
20+
21+
@RestController
22+
@RequiredArgsConstructor
23+
@RequestMapping("/api/admin/ble")
24+
public class AdminBLEController {
25+
private final AdminBLEService adminBLEService;
26+
27+
@PostMapping
28+
@Operation(summary = "BLE장비 생성",
29+
description = "BLE장비 생성")
30+
@ApiResponses(value = {
31+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
32+
@ApiResponse(responseCode = "404", description = "장비를 찾을 수 없습니다.",
33+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
34+
@ApiResponse(responseCode = "401", description = "권한이 없습니다.",
35+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
36+
})
37+
public CommonResponse<CreateBLERes> createBLE(
38+
@Parameter(description = "BLE장비 생성 요청 dto") @Valid @RequestBody CreateBLEReq createBLEReq) {
39+
return CommonResponse.success(adminBLEService.CreateBLEDevice(createBLEReq));
40+
}
41+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package devkor.com.teamcback.domain.ble.controller;
2+
3+
import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
4+
import devkor.com.teamcback.domain.ble.dto.response.GetBLERes;
5+
import devkor.com.teamcback.domain.ble.dto.response.UpdateBLERes;
6+
import devkor.com.teamcback.domain.ble.service.BLEService;
7+
import devkor.com.teamcback.global.response.CommonResponse;
8+
import io.swagger.v3.oas.annotations.Operation;
9+
import io.swagger.v3.oas.annotations.Parameter;
10+
import io.swagger.v3.oas.annotations.media.Content;
11+
import io.swagger.v3.oas.annotations.media.Schema;
12+
import io.swagger.v3.oas.annotations.responses.ApiResponse;
13+
import io.swagger.v3.oas.annotations.responses.ApiResponses;
14+
import jakarta.validation.Valid;
15+
import lombok.RequiredArgsConstructor;
16+
import org.springframework.web.bind.annotation.*;
17+
18+
@RestController
19+
@RequiredArgsConstructor
20+
@RequestMapping("/api/ble")
21+
22+
public class BLEController {
23+
private final BLEService bleService;
24+
25+
/***
26+
*
27+
* @param placeId BLE정보를 얻고자 하는 place Id
28+
*/
29+
@GetMapping
30+
@Operation(summary = "placeId를 통한 BLE device 상태 요청",
31+
description = "placeId를 통한 BLE device 상태 요청")
32+
@ApiResponses(value = {
33+
@ApiResponse(responseCode = "200", description = "정상 처리 되었습니다."),
34+
@ApiResponse(responseCode = "404", description = "Not Found",
35+
content = @Content(schema = @Schema(implementation = CommonResponse.class))),
36+
})
37+
public CommonResponse<GetBLERes> getBLE(
38+
@Parameter(name="placeId", description = "BLE 정보를 얻고자 하는 placeId")
39+
@RequestParam Long placeId) {
40+
return CommonResponse.success(bleService.getBLE(placeId));
41+
}
42+
43+
@PutMapping
44+
public CommonResponse<UpdateBLERes> updateBLE(
45+
@Valid @RequestBody UpdateBLEReq updateBLEReq){
46+
return CommonResponse.success(bleService.updateBLEDevice(updateBLEReq));
47+
}
48+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package devkor.com.teamcback.domain.ble.dto.request;
2+
3+
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
4+
import devkor.com.teamcback.domain.place.entity.Place;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
import java.time.LocalTime;
10+
11+
@Schema(description = "BLEdevice 생성 정보")
12+
@Getter
13+
@Setter
14+
public class CreateBLEReq {
15+
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
16+
private String deviceName;
17+
@Schema(description ="라운지 place")
18+
private Long placeId;
19+
@Schema(description = "라운지별 최대정원", example = "20")
20+
private int capacity;
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package devkor.com.teamcback.domain.ble.dto.request;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
import java.time.LocalDateTime;
10+
11+
@Schema(description = "BLEdevice 수정 정보")
12+
@Getter
13+
@Setter
14+
public class UpdateBLEReq {
15+
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
16+
private String deviceName;
17+
@Schema(description = "최근 감지 인원", example = "10")
18+
private int lastCount;
19+
@Schema(description = "최근 신호 전송 시간")
20+
@JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
21+
private LocalDateTime lastTime;
22+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package devkor.com.teamcback.domain.ble.dto.response;
2+
3+
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
4+
import io.swagger.v3.oas.annotations.media.Schema;
5+
import lombok.Getter;
6+
7+
@Schema(description = "BLEdevice 생성 정보")
8+
@Getter
9+
public class CreateBLERes {
10+
private Long id;
11+
12+
public CreateBLERes(BLEDevice bleDevice) {
13+
this.id = bleDevice.getId();
14+
}
15+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package devkor.com.teamcback.domain.ble.dto.response;
2+
3+
import devkor.com.teamcback.domain.ble.entity.BLEData;
4+
import devkor.com.teamcback.domain.ble.entity.BLEDevice;
5+
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
6+
import lombok.Getter;
7+
8+
import java.time.LocalDateTime;
9+
10+
@Getter
11+
public class GetBLERes {
12+
private Long id;
13+
private String deviceName;
14+
private Long placeId;
15+
private int capacity;
16+
private int lastCount;
17+
private int lastStatus;
18+
private LocalDateTime lastTime;
19+
20+
public GetBLERes(BLEDevice device, BLEData data, BLEstatus status) {
21+
this.id = device.getId();
22+
this.deviceName = device.getDeviceName();
23+
this.placeId = device.getPlace().getId();
24+
this.capacity = device.getCapacity();
25+
this.lastCount = data.getLastCount();
26+
this.lastStatus = status.getCode();
27+
this.lastTime = data.getLastTime();
28+
}
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package devkor.com.teamcback.domain.ble.dto.response;
2+
3+
import devkor.com.teamcback.domain.ble.entity.BLEData;
4+
import devkor.com.teamcback.domain.ble.entity.BLEstatus;
5+
import io.swagger.v3.oas.annotations.media.Schema;
6+
import lombok.Getter;
7+
8+
import java.time.LocalDateTime;
9+
10+
@Getter
11+
public class UpdateBLERes {
12+
@Schema(description = "라운지 설치된 기기명", example = "woodang_1f_lounge")
13+
private Long deviceId;
14+
@Schema(description = "최근 감지 인원", example = "10")
15+
private int lastCount;
16+
@Schema(description = "최근 Status", example = "AVAILABLE")
17+
private BLEstatus lastStatus;
18+
@Schema(description = "최근 신호 전송 시간")
19+
private LocalDateTime lastTime;
20+
21+
public UpdateBLERes(BLEData data) {
22+
this.deviceId = data.getDevice().getId();
23+
this.lastCount = data.getLastCount();
24+
this.lastStatus = data.getLastStatus();
25+
this.lastTime = data.getLastTime();
26+
}
27+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package devkor.com.teamcback.domain.ble.entity;
2+
3+
4+
import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
5+
import jakarta.persistence.*;
6+
import lombok.Getter;
7+
import lombok.NoArgsConstructor;
8+
import lombok.Setter;
9+
10+
import java.time.LocalDateTime;
11+
12+
@Entity
13+
@Table(name="tb_ble_data")
14+
@Getter
15+
@Setter
16+
@NoArgsConstructor
17+
public class BLEData {
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.IDENTITY)
20+
private Long id;
21+
22+
@ManyToOne(optional = false, fetch = FetchType.LAZY)
23+
@JoinColumn(name = "device_id", nullable = false)
24+
private BLEDevice device;
25+
26+
@Column
27+
private Integer lastCount;
28+
29+
@Enumerated(EnumType.ORDINAL)
30+
@Column
31+
private BLEstatus lastStatus;
32+
33+
@Column(nullable = false)
34+
private LocalDateTime lastTime;
35+
36+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package devkor.com.teamcback.domain.ble.entity;
2+
3+
4+
import devkor.com.teamcback.domain.ble.dto.request.UpdateBLEReq;
5+
import devkor.com.teamcback.domain.common.entity.BaseEntity;
6+
import devkor.com.teamcback.domain.place.entity.Place;
7+
import jakarta.persistence.*;
8+
import lombok.Getter;
9+
import lombok.NoArgsConstructor;
10+
import lombok.Setter;
11+
12+
import java.time.LocalDateTime;
13+
14+
@Entity
15+
@Table(name="tb_ble_device")
16+
@Getter
17+
@Setter
18+
@NoArgsConstructor
19+
public class BLEDevice extends BaseEntity {
20+
@Id
21+
@GeneratedValue(strategy = GenerationType.IDENTITY)
22+
private Long id;
23+
24+
@Column(nullable = false, unique = true)
25+
private String deviceName;
26+
27+
@OneToOne
28+
@JoinColumn(name = "placeId")
29+
private Place place;
30+
31+
@Column
32+
private int capacity;
33+
34+
public BLEDevice(String deviceName, Place place, int capacity) {
35+
this.deviceName = deviceName;
36+
this.place = place;
37+
this.capacity = capacity;
38+
}
39+
40+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package devkor.com.teamcback.domain.ble.entity;
2+
3+
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
7+
@Getter
8+
@RequiredArgsConstructor
9+
public enum BLEstatus {
10+
VACANT(0, "여유"),
11+
AVAILABLE(1, "보통"),
12+
CROWDED(2, "포화"),
13+
FAILURE(3, "신호없음");
14+
15+
private final int code;
16+
private final String label;
17+
}

0 commit comments

Comments
 (0)