Skip to content

Commit 726dd1b

Browse files
committed
refactory: controller 간소화
1 parent 18d2452 commit 726dd1b

File tree

10 files changed

+211
-266
lines changed

10 files changed

+211
-266
lines changed
Lines changed: 40 additions & 167 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using Microsoft.AspNetCore.Mvc;
22
using ProjectVG.Application.Services.User;
33
using ProjectVG.Application.Models.User;
4+
using ProjectVG.Api.Models.Auth.Request;
5+
using ProjectVG.Api.Models.Auth.Response;
46

57
namespace ProjectVG.Api.Controllers
68
{
@@ -17,191 +19,62 @@ public AuthController(IUserService userService, ILogger<AuthController> logger)
1719
_logger = logger;
1820
}
1921

20-
/// <summary>
21-
/// 회원가입
22-
/// </summary>
2322
[HttpPost("register")]
24-
public async Task<ActionResult<AuthResponseDto>> Register([FromBody] RegisterRequestDto request)
23+
public async Task<ActionResult<AuthResponse>> Register([FromBody] RegisterRequest request)
2524
{
26-
try
25+
var userDto = request.ToUserDto();
26+
var createdUser = await _userService.CreateUserAsync(userDto);
27+
28+
var response = new AuthResponse
2729
{
28-
if (!ModelState.IsValid)
29-
{
30-
return BadRequest(ModelState);
31-
}
32-
33-
var userDto = new UserDto
34-
{
35-
Username = request.Username,
36-
Name = request.Name,
37-
Email = request.Email,
38-
Provider = "local",
39-
ProviderId = request.Username,
40-
IsActive = true
41-
};
42-
43-
var createdUser = await _userService.CreateUserAsync(userDto);
44-
45-
var response = new AuthResponseDto
46-
{
47-
Success = true,
48-
Message = "회원가입이 완료되었습니다.",
49-
UserId = createdUser.Id,
50-
Username = createdUser.Username,
51-
Email = createdUser.Email
52-
};
53-
54-
_logger.LogInformation("새 사용자 회원가입 완료: {Username}", createdUser.Username);
55-
return Ok(response);
56-
}
57-
catch (InvalidOperationException ex)
58-
{
59-
return BadRequest(new AuthResponseDto
60-
{
61-
Success = false,
62-
Message = ex.Message
63-
});
64-
}
65-
catch (Exception ex)
66-
{
67-
_logger.LogError(ex, "회원가입 중 오류가 발생했습니다");
68-
return StatusCode(500, new AuthResponseDto
69-
{
70-
Success = false,
71-
Message = "회원가입 중 내부 서버 오류가 발생했습니다."
72-
});
73-
}
30+
Success = true,
31+
Message = "회원가입이 완료되었습니다.",
32+
UserId = createdUser.Id,
33+
Username = createdUser.Username,
34+
Email = createdUser.Email
35+
};
36+
37+
_logger.LogInformation("새 사용자 회원가입 완료: {Username}", createdUser.Username);
38+
return Ok(response);
7439
}
7540

76-
/// <summary>
77-
/// 로그인
78-
/// </summary>
7941
[HttpPost("login")]
80-
public async Task<ActionResult<AuthResponseDto>> Login([FromBody] LoginRequestDto request)
42+
public async Task<ActionResult<AuthResponse>> Login([FromBody] LoginRequest request)
8143
{
82-
try
83-
{
84-
if (!ModelState.IsValid)
85-
{
86-
return BadRequest(ModelState);
87-
}
88-
89-
// 사용자명으로 사용자 조회
90-
var user = await _userService.GetUserByUsernameAsync(request.Username);
91-
if (user == null)
92-
{
93-
return Unauthorized(new AuthResponseDto
94-
{
95-
Success = false,
96-
Message = "사용자명 또는 비밀번호가 올바르지 않습니다."
97-
});
98-
}
99-
100-
// TODO: 실제 비밀번호 검증 로직 추가 필요
101-
102-
var response = new AuthResponseDto
103-
{
104-
Success = true,
105-
Message = "로그인이 완료되었습니다.",
106-
UserId = user.Id,
107-
Username = user.Username,
108-
Email = user.Email
109-
};
110-
111-
_logger.LogInformation("사용자 로그인 완료: {Username}", user.Username);
112-
return Ok(response);
113-
}
114-
catch (Exception ex)
44+
var user = await _userService.GetUserByUsernameAsync(request.Username);
45+
var response = new AuthResponse
11546
{
116-
_logger.LogError(ex, "로그인 중 오류가 발생했습니다");
117-
return StatusCode(500, new AuthResponseDto
118-
{
119-
Success = false,
120-
Message = "로그인 중 내부 서버 오류가 발생했습니다."
121-
});
122-
}
47+
Success = true,
48+
Message = "로그인이 완료되었습니다.",
49+
UserId = user.Id,
50+
Username = user.Username,
51+
Email = user.Email
52+
};
53+
54+
_logger.LogInformation("사용자 로그인 완료: {Username}", user.Username);
55+
return Ok(response);
12356
}
12457

125-
/// <summary>
126-
/// 사용자명 중복 확인
127-
/// </summary>
12858
[HttpGet("check-username/{username}")]
129-
public async Task<ActionResult<CheckResponseDto>> CheckUsername(string username)
59+
public async Task<ActionResult<CheckResponse>> CheckUsername(string username)
13060
{
131-
try
132-
{
133-
var exists = await _userService.UsernameExistsAsync(username);
134-
return Ok(new CheckResponseDto
135-
{
136-
Exists = exists,
137-
Message = exists ? "이미 사용 중인 사용자명입니다." : "사용 가능한 사용자명입니다."
138-
});
139-
}
140-
catch (Exception ex)
61+
var exists = await _userService.UsernameExistsAsync(username);
62+
return Ok(new CheckResponse
14163
{
142-
_logger.LogError(ex, "사용자명 중복 확인 중 오류가 발생했습니다");
143-
return StatusCode(500, new CheckResponseDto
144-
{
145-
Exists = false,
146-
Message = "중복 확인 중 내부 서버 오류가 발생했습니다."
147-
});
148-
}
64+
Exists = exists,
65+
Message = exists ? "이미 사용 중인 사용자명입니다." : "사용 가능한 사용자명입니다."
66+
});
14967
}
15068

151-
/// <summary>
152-
/// 이메일 중복 확인
153-
/// </summary>
15469
[HttpGet("check-email/{email}")]
155-
public async Task<ActionResult<CheckResponseDto>> CheckEmail(string email)
70+
public async Task<ActionResult<CheckResponse>> CheckEmail(string email)
15671
{
157-
try
158-
{
159-
var exists = await _userService.EmailExistsAsync(email);
160-
return Ok(new CheckResponseDto
161-
{
162-
Exists = exists,
163-
Message = exists ? "이미 사용 중인 이메일입니다." : "사용 가능한 이메일입니다."
164-
});
165-
}
166-
catch (Exception ex)
72+
var exists = await _userService.EmailExistsAsync(email);
73+
return Ok(new CheckResponse
16774
{
168-
_logger.LogError(ex, "이메일 중복 확인 중 오류가 발생했습니다");
169-
return StatusCode(500, new CheckResponseDto
170-
{
171-
Exists = false,
172-
Message = "중복 확인 중 내부 서버 오류가 발생했습니다."
173-
});
174-
}
75+
Exists = exists,
76+
Message = exists ? "이미 사용 중인 이메일입니다." : "사용 가능한 이메일입니다."
77+
});
17578
}
17679
}
177-
178-
// DTO 클래스들
179-
public class RegisterRequestDto
180-
{
181-
public string Username { get; set; } = string.Empty;
182-
public string Name { get; set; } = string.Empty;
183-
public string Email { get; set; } = string.Empty;
184-
public string Password { get; set; } = string.Empty;
185-
}
186-
187-
public class LoginRequestDto
188-
{
189-
public string Username { get; set; } = string.Empty;
190-
public string Password { get; set; } = string.Empty;
191-
}
192-
193-
public class AuthResponseDto
194-
{
195-
public bool Success { get; set; }
196-
public string Message { get; set; } = string.Empty;
197-
public Guid? UserId { get; set; }
198-
public string? Username { get; set; }
199-
public string? Email { get; set; }
200-
}
201-
202-
public class CheckResponseDto
203-
{
204-
public bool Exists { get; set; }
205-
public string Message { get; set; } = string.Empty;
206-
}
20780
}

ProjectVG.Api/Controllers/CharacterController.cs

Lines changed: 16 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -22,115 +22,42 @@ public CharacterController(ICharacterService characterService, ILogger<Character
2222
[HttpGet]
2323
public async Task<ActionResult<IEnumerable<CharacterResponse>>> GetAllCharacters()
2424
{
25-
try
26-
{
27-
var characterDtos = await _characterService.GetAllCharactersAsync();
28-
var responses = characterDtos.Select(CharacterResponse.ToResponseDto);
29-
return Ok(responses);
30-
}
31-
catch (Exception ex)
32-
{
33-
_logger.LogError(ex, "모든 캐릭터 조회 중 오류가 발생했습니다");
34-
return StatusCode(500, "캐릭터 목록을 가져오는 중 내부 서버 오류가 발생했습니다.");
35-
}
25+
var characterDtos = await _characterService.GetAllCharactersAsync();
26+
var responses = characterDtos.Select(CharacterResponse.ToResponseDto);
27+
return Ok(responses);
3628
}
3729

3830
[HttpGet("{id}")]
3931
public async Task<ActionResult<CharacterResponse>> GetCharacterById(Guid id)
4032
{
41-
try
42-
{
43-
var characterDto = await _characterService.GetCharacterByIdAsync(id);
44-
if (characterDto == null)
45-
{
46-
return NotFound($"ID {id}인 캐릭터를 찾을 수 없습니다.");
47-
}
48-
49-
var response = CharacterResponse.ToResponseDto(characterDto);
50-
return Ok(response);
51-
}
52-
catch (Exception ex)
53-
{
54-
_logger.LogError(ex, "ID {CharacterId}인 캐릭터 조회 중 오류가 발생했습니다", id);
55-
return StatusCode(500, "캐릭터 정보를 가져오는 중 내부 서버 오류가 발생했습니다.");
56-
}
33+
var characterDto = await _characterService.GetCharacterByIdAsync(id);
34+
var response = CharacterResponse.ToResponseDto(characterDto);
35+
return Ok(response);
5736
}
5837

5938
[HttpPost]
6039
public async Task<ActionResult<CharacterResponse>> CreateCharacter([FromBody] CreateCharacterRequest request)
6140
{
62-
try
63-
{
64-
if (!ModelState.IsValid)
65-
{
66-
return BadRequest(ModelState);
67-
}
68-
69-
var command = new CreateCharacterCommand
70-
{
71-
Name = request.Name,
72-
Description = request.Description,
73-
Role = request.Role,
74-
IsActive = request.IsActive
75-
};
76-
77-
var characterDto = await _characterService.CreateCharacterAsync(command);
78-
var response = CharacterResponse.ToResponseDto(characterDto);
79-
return CreatedAtAction(nameof(GetCharacterById), new { id = response.Id }, response);
80-
}
81-
catch (Exception ex)
82-
{
83-
_logger.LogError(ex, "캐릭터 생성 중 오류가 발생했습니다");
84-
return StatusCode(500, "캐릭터 생성 중 내부 서버 오류가 발생했습니다.");
85-
}
41+
var command = request.ToCreateCharacterCommand();
42+
var characterDto = await _characterService.CreateCharacterAsync(command);
43+
var response = CharacterResponse.ToResponseDto(characterDto);
44+
return CreatedAtAction(nameof(GetCharacterById), new { id = response.Id }, response);
8645
}
8746

8847
[HttpPut("{id}")]
8948
public async Task<ActionResult<CharacterResponse>> UpdateCharacter(Guid id, [FromBody] UpdateCharacterRequest request)
9049
{
91-
try
92-
{
93-
if (!ModelState.IsValid)
94-
{
95-
return BadRequest(ModelState);
96-
}
97-
98-
var command = new UpdateCharacterCommand
99-
{
100-
Name = request.Name,
101-
Description = request.Description,
102-
Role = request.Role,
103-
IsActive = request.IsActive
104-
};
105-
106-
var characterDto = await _characterService.UpdateCharacterAsync(id, command);
107-
var response = CharacterResponse.ToResponseDto(characterDto);
108-
return Ok(response);
109-
}
110-
catch (KeyNotFoundException)
111-
{
112-
return NotFound($"ID {id}인 캐릭터를 찾을 수 없습니다.");
113-
}
114-
catch (Exception ex)
115-
{
116-
_logger.LogError(ex, "ID {CharacterId}인 캐릭터 수정 중 오류가 발생했습니다", id);
117-
return StatusCode(500, "캐릭터 정보 수정 중 내부 서버 오류가 발생했습니다.");
118-
}
50+
var command = request.ToUpdateCharacterCommand();
51+
var characterDto = await _characterService.UpdateCharacterAsync(id, command);
52+
var response = CharacterResponse.ToResponseDto(characterDto);
53+
return Ok(response);
11954
}
12055

12156
[HttpDelete("{id}")]
12257
public async Task<ActionResult> DeleteCharacter(Guid id)
12358
{
124-
try
125-
{
126-
await _characterService.DeleteCharacterAsync(id);
127-
return NoContent();
128-
}
129-
catch (Exception ex)
130-
{
131-
_logger.LogError(ex, "ID {CharacterId}인 캐릭터 삭제 중 오류가 발생했습니다", id);
132-
return StatusCode(500, "캐릭터 삭제 중 내부 서버 오류가 발생했습니다.");
133-
}
59+
await _characterService.DeleteCharacterAsync(id);
60+
return NoContent();
13461
}
13562
}
13663
}

ProjectVG.Api/Controllers/HomeController.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public IActionResult TestException(string type)
3939
"notfound" => throw new NotFoundException(ErrorCode.NOT_FOUND, "테스트 리소스를 찾을 수 없습니다"),
4040
"validation" => throw new ValidationException(ErrorCode.VALIDATION_FAILED, "유효성 검사 실패"),
4141
"external" => throw new ExternalServiceException("테스트서비스", "http://test.com/api", "외부 서비스 오류", ErrorCode.EXTERNAL_SERVICE_ERROR),
42+
"generic" => throw new InvalidOperationException("일반적인 시스템 오류가 발생했습니다"),
43+
"nullref" => throw new NullReferenceException("널 참조 오류가 발생했습니다"),
44+
"divide" => throw new DivideByZeroException("0으로 나누기 오류가 발생했습니다"),
4245
_ => throw new ProjectVGException(ErrorCode.BAD_REQUEST, "알 수 없는 예외 타입", 400)
4346
};
4447
}

0 commit comments

Comments
 (0)