UserActivityLogController.java 4.7 KB
// statistics/controller/UserActivityLogController.java
package com.aigeo.statistics.controller;

import com.aigeo.statistics.entity.UserActivityLog;
import com.aigeo.statistics.service.UserActivityLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Optional;

@RestController
@RequestMapping("/api/user-activity-logs")
public class UserActivityLogController {

    @Autowired
    private UserActivityLogService userActivityLogService;

    @GetMapping
    public List<UserActivityLog> getAllActivityLogs() {
        return userActivityLogService.getAllActivityLogs();
    }

    @GetMapping("/{id}")
    public ResponseEntity<UserActivityLog> getActivityLogById(@PathVariable Integer id) {
        Optional<UserActivityLog> activityLog = userActivityLogService.getActivityLogById(id);
        return activityLog.map(ResponseEntity::ok)
                .orElse(ResponseEntity.notFound().build());
    }

    @GetMapping("/company/{companyId}")
    public List<UserActivityLog> getActivityLogsByCompanyId(@PathVariable Integer companyId) {
        return userActivityLogService.getActivityLogsByCompanyId(companyId);
    }

    @GetMapping("/user/{userId}")
    public List<UserActivityLog> getActivityLogsByUserId(@PathVariable Integer userId) {
        return userActivityLogService.getActivityLogsByUserId(userId);
    }

    @GetMapping("/activity-type/{activityType}")
    public List<UserActivityLog> getActivityLogsByActivityType(@PathVariable String activityType) {
        return userActivityLogService.getActivityLogsByActivityType(activityType);
    }

    @GetMapping("/company/{companyId}/user/{userId}")
    public List<UserActivityLog> getActivityLogsByCompanyIdAndUserId(
            @PathVariable Integer companyId, @PathVariable Integer userId) {
        return userActivityLogService.getActivityLogsByCompanyIdAndUserId(companyId, userId);
    }

    @GetMapping("/company/{companyId}/activity-type/{activityType}")
    public List<UserActivityLog> getActivityLogsByCompanyIdAndActivityType(
            @PathVariable Integer companyId, @PathVariable String activityType) {
        return userActivityLogService.getActivityLogsByCompanyIdAndActivityType(companyId, activityType);
    }

    @GetMapping("/company/{companyId}/date-range")
    public List<UserActivityLog> getActivityLogsByCompanyIdAndDateRange(
            @PathVariable Integer companyId,
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startDate,
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endDate) {
        return userActivityLogService.getActivityLogsByCompanyIdAndDateRange(companyId, startDate, endDate);
    }

    @GetMapping("/user/{userId}/date-range")
    public List<UserActivityLog> getActivityLogsByUserIdAndDateRange(
            @PathVariable Integer userId,
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startDate,
            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endDate) {
        return userActivityLogService.getActivityLogsByUserIdAndDateRange(userId, startDate, endDate);
    }

    @PostMapping
    public UserActivityLog createActivityLog(@RequestBody UserActivityLog activityLog) {
        return userActivityLogService.saveActivityLog(activityLog);
    }

    @PutMapping("/{id}")
    public ResponseEntity<UserActivityLog> updateActivityLog(@PathVariable Integer id,
                                                          @RequestBody UserActivityLog activityLogDetails) {
        Optional<UserActivityLog> activityLog = userActivityLogService.getActivityLogById(id);
        if (activityLog.isPresent()) {
            UserActivityLog updatedActivityLog = activityLog.get();
            updatedActivityLog.setActivityType(activityLogDetails.getActivityType());
            updatedActivityLog.setActivityDetails(activityLogDetails.getActivityDetails());
            updatedActivityLog.setIpAddress(activityLogDetails.getIpAddress());

            UserActivityLog savedActivityLog = userActivityLogService.saveActivityLog(updatedActivityLog);
            return ResponseEntity.ok(savedActivityLog);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteActivityLog(@PathVariable Integer id) {
        userActivityLogService.deleteActivityLog(id);
        return ResponseEntity.noContent().build();
    }
}