package com.lesingle.creation.controller; import com.lesingle.creation.common.core.Result; import com.lesingle.creation.common.security.UserPrincipal; import com.lesingle.creation.dto.child.CreateChildDTO; import com.lesingle.creation.dto.child.UpdateChildDTO; import com.lesingle.creation.dto.publicuser.PublicLoginDTO; import com.lesingle.creation.dto.publicuser.PublicRegisterDTO; import com.lesingle.creation.dto.publicuser.PublicUserUpdateDTO; import com.lesingle.creation.service.PublicService; import com.lesingle.creation.vo.child.ChildVO; import com.lesingle.creation.vo.publicuser.PublicUserVO; import com.lesingle.creation.vo.publicuser.LoginResponseVO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 公共接口控制器 * 提供公众用户注册、登录、个人信息、子女管理等功能 */ @Tag(name = "公共接口", description = "公众用户相关接口") @RestController @RequestMapping("/api/public") @RequiredArgsConstructor public class PublicController { private final PublicService publicService; // ==================== 注册 & 登录(公开接口) ==================== @PostMapping("/auth/register") @Operation(summary = "用户注册") public Result register(@RequestBody @Valid PublicRegisterDTO dto) { return Result.success(publicService.register(dto)); } @PostMapping("/auth/login") @Operation(summary = "用户登录") public Result login(@RequestBody @Valid PublicLoginDTO dto) { return Result.success(publicService.login(dto)); } // ==================== 个人信息(需要登录) ==================== @GetMapping("/mine/profile") @Operation(summary = "获取个人信息") public Result getProfile(@AuthenticationPrincipal UserPrincipal userPrincipal) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.getUserInfo(userId)); } @PutMapping("/mine/profile") @Operation(summary = "更新个人信息") public Result updateProfile( @AuthenticationPrincipal UserPrincipal userPrincipal, @RequestBody PublicUserUpdateDTO dto) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.updateProfile(userId, dto)); } // ==================== 子女管理(需要登录) ==================== @GetMapping("/mine/children") @Operation(summary = "获取子女列表") public Result> getChildren(@AuthenticationPrincipal UserPrincipal userPrincipal) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.getChildren(userId)); } @PostMapping("/mine/children") @Operation(summary = "创建子女") public Result createChild( @AuthenticationPrincipal UserPrincipal userPrincipal, @RequestBody @Valid CreateChildDTO dto) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.createChild(userId, dto)); } @GetMapping("/mine/children/{id}") @Operation(summary = "获取子女详情") public Result getChild( @AuthenticationPrincipal UserPrincipal userPrincipal, @PathVariable Long id) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.getChild(userId, id)); } @PutMapping("/mine/children/{id}") @Operation(summary = "更新子女信息") public Result updateChild( @AuthenticationPrincipal UserPrincipal userPrincipal, @PathVariable Long id, @RequestBody UpdateChildDTO dto) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.updateChild(userId, id, dto)); } @DeleteMapping("/mine/children/{id}") @Operation(summary = "删除子女") public Result deleteChild( @AuthenticationPrincipal UserPrincipal userPrincipal, @PathVariable Long id) { Long userId = userPrincipal.getUserId(); publicService.deleteChild(userId, id); return Result.success(null); } // ==================== 子女独立账号管理 ==================== @PostMapping("/children/create-account") @Operation(summary = "创建子女独立账号") public Result createChildAccount( @AuthenticationPrincipal UserPrincipal userPrincipal, @RequestBody @Valid CreateChildDTO dto) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.createChildAccount(userId, dto)); } @GetMapping("/children/accounts") @Operation(summary = "获取子女账号列表") public Result> getChildAccounts(@AuthenticationPrincipal UserPrincipal userPrincipal) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.getChildAccounts(userId)); } @PutMapping("/children/accounts/{id}") @Operation(summary = "更新子女账号信息") public Result updateChildAccount( @AuthenticationPrincipal UserPrincipal userPrincipal, @PathVariable Long id, @RequestBody UpdateChildDTO dto) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.updateChildAccount(userId, id, dto)); } @GetMapping("/mine/parent-info") @Operation(summary = "获取监护人信息") public Result getParentInfo(@AuthenticationPrincipal UserPrincipal userPrincipal) { Long userId = userPrincipal.getUserId(); return Result.success(publicService.getParentInfo(userId)); } // ==================== 活动浏览(公开接口) ==================== @GetMapping("/activities") @Operation(summary = "获取活动列表") public Result getActivities( @RequestParam(defaultValue = "1") Integer page, @RequestParam(defaultValue = "12") Integer pageSize, @RequestParam(required = false) String keyword, @RequestParam(required = false) String contestType, @AuthenticationPrincipal UserPrincipal userPrincipal) { Long userId = userPrincipal != null ? userPrincipal.getUserId() : null; return Result.success(publicService.getPublicActivities(page, pageSize, keyword, contestType, userId)); } @GetMapping("/activities/{id}") @Operation(summary = "获取活动详情") public Result getActivityDetail(@PathVariable Long id) { return Result.success(publicService.getActivityDetail(id)); } }