Skip to content

Commit 4482d5c

Browse files
authored
Merge pull request #12 from ProjectVG/feature/refactoring
Feature/refactoring
2 parents b6ee595 + 3d399a4 commit 4482d5c

File tree

133 files changed

+11646
-2056
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+11646
-2056
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ Thumbs.db
114114
.DS_Store
115115
Desktop.ini
116116

117+
# Shell configuration files
118+
.zshrc
119+
.bashrc
120+
.bash_profile
121+
.profile
122+
117123
# Crash dumps
118124
*.dmp
119125

ProjectVG.Api/ApiServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static IServiceCollection AddDevelopmentCors(this IServiceCollection serv
7070
services.AddCors(options => {
7171
options.AddPolicy("AllowAll",
7272
policy => policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()
73-
.WithExposedHeaders("X-Access-Token", "X-Refresh-Token", "X-Expires-In", "X-UID"));
73+
.WithExposedHeaders("X-Access-Credit", "X-Refresh-Credit", "X-Expires-In", "X-UID"));
7474
});
7575

7676
return services;
Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using Microsoft.AspNetCore.Mvc;
22
using ProjectVG.Application.Services.Auth;
3+
using ProjectVG.Common.Constants;
4+
using ProjectVG.Common.Exceptions;
35

46
namespace ProjectVG.Api.Controllers
57
{
68
[ApiController]
7-
[Route("api/v1/[controller]")]
9+
[Route("api/v1/auth")]
810
public class AuthController : ControllerBase
911
{
1012
private readonly IAuthService _authService;
@@ -14,14 +16,16 @@ public AuthController(IAuthService authService)
1416
_authService = authService;
1517
}
1618

19+
/// <summary>
20+
/// Access Token 갱신
21+
/// </summary>
1722
[HttpPost("refresh")]
1823
public async Task<IActionResult> RefreshToken()
1924
{
2025
var refreshToken = GetRefreshTokenFromHeader();
21-
var result = await _authService.RefreshTokenAsync(refreshToken);
22-
23-
return Ok(new
24-
{
26+
var result = await _authService.RefreshAccessTokenAsync(refreshToken);
27+
28+
return Ok(new {
2529
success = true,
2630
tokens = result.Tokens,
2731
user = result.User
@@ -33,9 +37,8 @@ public async Task<IActionResult> Logout()
3337
{
3438
var refreshToken = GetRefreshTokenFromHeader();
3539
var success = await _authService.LogoutAsync(refreshToken);
36-
37-
return Ok(new
38-
{
40+
41+
return Ok(new {
3942
success = success,
4043
message = success ? "Logout successful" : "Logout failed"
4144
});
@@ -44,15 +47,13 @@ public async Task<IActionResult> Logout()
4447
[HttpPost("guest-login")]
4548
public async Task<IActionResult> GuestLogin([FromBody] string guestId)
4649
{
47-
if (string.IsNullOrEmpty(guestId))
48-
{
50+
if (string.IsNullOrEmpty(guestId)) {
4951
throw new ValidationException(ErrorCode.GUEST_ID_INVALID);
5052
}
5153

52-
var result = await _authService.LoginWithOAuthAsync("guest", guestId);
53-
54-
return Ok(new
55-
{
54+
var result = await _authService.GuestLoginAsync(guestId);
55+
56+
return Ok(new {
5657
success = true,
5758
tokens = result.Tokens,
5859
user = result.User
@@ -61,7 +62,7 @@ public async Task<IActionResult> GuestLogin([FromBody] string guestId)
6162

6263
private string GetRefreshTokenFromHeader()
6364
{
64-
return Request.Headers["X-Refresh-Token"].FirstOrDefault() ?? string.Empty;
65+
return Request.Headers["X-Refresh-Credit"].FirstOrDefault() ?? string.Empty;
6566
}
6667
}
67-
}
68+
}

ProjectVG.Api/Controllers/CharacterController.cs

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using ProjectVG.Application.Models.Character;
44
using ProjectVG.Api.Models.Character.Request;
55
using ProjectVG.Api.Models.Character.Response;
6+
using ProjectVG.Api.Filters;
7+
using System.Security.Claims;
68

79
namespace ProjectVG.Api.Controllers
810
{
@@ -19,6 +21,16 @@ public CharacterController(ICharacterService characterService, ILogger<Character
1921
_logger = logger;
2022
}
2123

24+
private Guid? GetCurrentUserId()
25+
{
26+
var userIdClaim = User.FindFirst("user_id")?.Value;
27+
if (Guid.TryParse(userIdClaim, out var userId))
28+
{
29+
return userId;
30+
}
31+
return null;
32+
}
33+
2234
[HttpGet]
2335
public async Task<ActionResult<IEnumerable<CharacterResponse>>> GetAllCharacters()
2436
{
@@ -35,29 +47,81 @@ public async Task<ActionResult<CharacterResponse>> GetCharacterById(Guid id)
3547
return Ok(response);
3648
}
3749

38-
[HttpPost]
39-
public async Task<ActionResult<CharacterResponse>> CreateCharacter([FromBody] CreateCharacterRequest request)
50+
[HttpPost("individual")]
51+
[JwtAuthentication]
52+
public async Task<ActionResult<CharacterResponse>> CreateCharacterWithFields([FromBody] CreateCharacterWithFieldsRequest request)
4053
{
41-
var command = request.ToCreateCharacterCommand();
42-
var characterDto = await _characterService.CreateCharacterAsync(command);
54+
var userId = GetCurrentUserId();
55+
var command = request.ToCommand(userId);
56+
var characterDto = await _characterService.CreateCharacterWithFieldsAsync(command);
4357
var response = CharacterResponse.ToResponseDto(characterDto);
4458
return CreatedAtAction(nameof(GetCharacterById), new { id = response.Id }, response);
4559
}
4660

47-
[HttpPut("{id}")]
48-
public async Task<ActionResult<CharacterResponse>> UpdateCharacter(Guid id, [FromBody] UpdateCharacterRequest request)
61+
[HttpPost("systemprompt")]
62+
[JwtAuthentication]
63+
public async Task<ActionResult<CharacterResponse>> CreateCharacterWithSystemPrompt([FromBody] CreateCharacterWithSystemPromptRequest request)
64+
{
65+
var userId = GetCurrentUserId();
66+
var command = request.ToCommand(userId);
67+
var characterDto = await _characterService.CreateCharacterWithSystemPromptAsync(command);
68+
var response = CharacterResponse.ToResponseDto(characterDto);
69+
return CreatedAtAction(nameof(GetCharacterById), new { id = response.Id }, response);
70+
}
71+
72+
[HttpPut("{id}/individual")]
73+
public async Task<ActionResult<CharacterResponse>> UpdateCharacterToIndividual(Guid id, [FromBody] UpdateCharacterToIndividualRequest request)
74+
{
75+
var command = request.ToCommand(id);
76+
var characterDto = await _characterService.UpdateCharacterToIndividualAsync(command);
77+
var response = CharacterResponse.ToResponseDto(characterDto);
78+
return Ok(response);
79+
}
80+
81+
[HttpPut("{id}/systemprompt")]
82+
public async Task<ActionResult<CharacterResponse>> UpdateCharacterToSystemPrompt(Guid id, [FromBody] UpdateCharacterToSystemPromptRequest request)
4983
{
50-
var command = request.ToUpdateCharacterCommand();
51-
var characterDto = await _characterService.UpdateCharacterAsync(id, command);
84+
var command = request.ToCommand(id);
85+
var characterDto = await _characterService.UpdateCharacterToSystemPromptAsync(command);
5286
var response = CharacterResponse.ToResponseDto(characterDto);
5387
return Ok(response);
5488
}
5589

5690
[HttpDelete("{id}")]
91+
[JwtAuthentication]
5792
public async Task<ActionResult> DeleteCharacter(Guid id)
5893
{
59-
await _characterService.DeleteCharacterAsync(id);
94+
var userId = GetCurrentUserId();
95+
if (!userId.HasValue)
96+
{
97+
return Unauthorized();
98+
}
99+
100+
await _characterService.DeleteCharacterAsync(id, userId.Value);
60101
return NoContent();
61102
}
103+
104+
[HttpGet("my")]
105+
[JwtAuthentication]
106+
public async Task<ActionResult<IEnumerable<CharacterResponse>>> GetMyCharacters([FromQuery] string orderBy = "latest")
107+
{
108+
var userId = GetCurrentUserId();
109+
if (!userId.HasValue)
110+
{
111+
return Unauthorized();
112+
}
113+
114+
var characterDtos = await _characterService.GetMyCharactersAsync(userId.Value, orderBy);
115+
var responses = characterDtos.Select(CharacterResponse.ToResponseDto);
116+
return Ok(responses);
117+
}
118+
119+
[HttpGet("public")]
120+
public async Task<ActionResult<IEnumerable<CharacterResponse>>> GetPublicCharacters([FromQuery] string orderBy = "latest")
121+
{
122+
var characterDtos = await _characterService.GetPublicCharactersAsync(orderBy);
123+
var responses = characterDtos.Select(CharacterResponse.ToResponseDto);
124+
return Ok(responses);
125+
}
62126
}
63127
}

ProjectVG.Api/Controllers/ChatController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using Microsoft.AspNetCore.Mvc;
22
using ProjectVG.Application.Models.Chat;
3-
using ProjectVG.Application.Models.API.Request;
3+
using ProjectVG.Api.Models.Chat.Request;
44
using ProjectVG.Application.Services.Chat;
55
using System.Security.Claims;
66

0 commit comments

Comments
 (0)