프로젝트/무인 사물함

[AIoT] 무인 사물함 프로젝트 MVC 모델 작성 Controller

마달랭 2025. 2. 13. 19:28
반응형

개요

MVC 아키텍처에서 Controller는 애플리케이션의 사용자 인터페이스 로직과 비즈니스 로직을 연결하는 중요한 구성 요소이다.

클라이언트의 요청을 받아 처리하고, 서비스 계층의 비즈니스 로직을 호출한다.

요청된 데이터를 가공하고, 적절한 응답을 반환한다.

 

주요 기능으로 HTTP 요청 처리, 요청 파라미터 매핑, 서비스 메서드 호출, 응답 데이터 포맷팅 등이 있다.

HTTP 요청의 타입에 따라 매핑할 주소를 입력하면, 클라이언트는 해당 주소로 API 호출 요청을 보낼 수 있다.

하기엔 무인 사물함 프로젝트를 진행하며 작성한 컨트롤러 정보이다.

 

 

AdminController.java

package com.a207.smartlocker.controller;

import com.a207.smartlocker.model.dto.*;
import com.a207.smartlocker.model.entity.LockerUsageLog;
import com.a207.smartlocker.model.entity.Robot;
import com.a207.smartlocker.service.AdminService;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/admin")
@RequiredArgsConstructor
public class AdminController {
    private final AdminService adminService;

    @PostMapping("/login")
    public ResponseEntity<AdminLoginResponse> login(@RequestBody AdminLoginRequest request) {
        AdminLoginResponse response = adminService.login(request);
        return ResponseEntity.ok(response);
    }

    @GetMapping("/getSession")
    public ResponseEntity<SessionResponse> getSessionId() {
        SessionResponse sessionResponse = adminService.createSessionId();
        return ResponseEntity.ok(sessionResponse);
    }

    @GetMapping("/robots")
    public ResponseEntity<List<RobotResponse>> getRobots() {
        List<RobotResponse> robots = adminService.getAllRobots();
        return ResponseEntity.ok(robots);
    }

    @GetMapping("/user-usage")
    public ResponseEntity<List<UserUsageResponse>> getUserUsageStatistics() {
        List<UserUsageResponse> statistics = adminService.getUserUsageStatistics();
        return ResponseEntity.ok(statistics);
    }

    @PostMapping("/usage-logs")
    public ResponseEntity<List<LockerUsageLogResponse>> getUsageLogs(@RequestBody DateRangeRequest request) {
        List<LockerUsageLogResponse> response = adminService.getUsageLogByDateRange(request.getStartDate(), request.getEndDate());
        return ResponseEntity.ok(response);
    }
}


관리자 권한으로 호출할 수 있는 API의 집합체이다.

로그인, 세션 정보, 로봇 정보, 유저별 사용 내역, 로그 조회 등의 기능을 관리 한다.

 

 

LockerController.java

// LockerController.java
package com.a207.smartlocker.controller;

import com.a207.smartlocker.model.dto.*;
import com.a207.smartlocker.model.entity.Locker;
import com.a207.smartlocker.service.LockerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/locker")
public class LockerController {

    @Autowired
    private LockerService lockerService;

    @PostMapping("/store")
    public ResponseEntity<StorageResponse> store(@RequestBody StorageRequest request) {
        try {
            StorageResponse response = lockerService.storeItem(request);
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).
                    body(StorageResponse.builder()
                            .message("작업 수행 실패: " + e.getMessage())
                            .build());
        }
    }


    @PostMapping("/retrieve")
    public ResponseEntity<RetrieveResponse> retrieveItem(@RequestBody RetrieveRequest request) {
        try {
            RetrieveResponse response = lockerService.retrieveItem(request);
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(RetrieveResponse.builder()
                    .lockerId(request.getLockerId())
                    .message("작업 수행 실패: " + e.getMessage())
                    .build());
        }
    }

    @GetMapping("/{locationName}/status")
    public ResponseEntity<List<Locker>> getLockerStatus(@PathVariable String locationName) {
        return ResponseEntity.ok(lockerService.getLockersByLocation(locationName));
    }

    @GetMapping("/getRetrieveTasks")
    public ResponseEntity<List<TaskQueueResponse>> getRetrieveTasks() {
        return ResponseEntity.ok(lockerService.getRetrieveTasks());
    }
}

 

사용자가 호출할 수 있는 API의 집합체이다.

보관, 수령과 각 섹터별 사물함의 상태를 확인하고, 대기열에 있는 작업을 조회하는 기능을 관리한다.



RobotTaskController.java

package com.a207.smartlocker.controller;

import com.a207.smartlocker.model.dto.RobotTaskResponse;
import com.a207.smartlocker.service.RobotTaskService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/robot-tasks")
@RequiredArgsConstructor
public class RobotTaskController {
    private final RobotTaskService robotTaskService;

    @PostMapping("/process")
    public ResponseEntity<RobotTaskResponse> processRobotTask() {
        try {
            RobotTaskResponse response = robotTaskService.processNextTask();
            return ResponseEntity.ok(response);
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(
                    RobotTaskResponse.builder()
                            .message("작업 수행 실패: " + e.getMessage())
                            .success(false)
                            .build()
            );
        }
    }
}

 

젯슨 나노에서 수행할 수 있는 로봇 작업과 관련된 컨트롤러이다.

현재 작업 대기열에 있는 작업 중 수행할 수 있는 작업이 있다면 진행하는 기능을 관리한다.

728x90
반응형