675ef64975
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m31s
IMPLEMENTATION:
- Create 4 FastEndpoints Endpoint classes:
- LoginEndpoint: POST /api/auth/login
- RefreshTokenEndpoint: POST /api/auth/refresh
- ChangePasswordEndpoint: POST /api/auth/change-password
- ResetPasswordEndpoint: POST /api/auth/reset-password
- Backup AuthController.cs (no longer active)
- Add FastEndpoints.Endpoint<TRequest, TResponse> pattern
- Implement proper DI with AuthService injection
- Use Policies("Bearer") for authorization
- Proper error handling with ThrowError()
ARCHITECTURE:
- Start of Phase 1: Core Auth APIs
- Endpoints follow FastEndpoints conventions
- DTOs: LoginRequest, RefreshTokenRequest, ChangePasswordRequest, ResetPasswordRequest, TokenPairResponse, MessageResponse
- AllowAnonymous for login/refresh/reset
- Bearer policy for change-password
VERIFICATION:
✅ dotnet build: 0 errors, 0 warnings
✅ dotnet test: 26/26 passed
✅ FastEndpoints auto-discovery working (no endpoint errors)
✅ JWT validation passes
Next Phase: BlogController and remaining APIs
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
25 lines
699 B
JavaScript
25 lines
699 B
JavaScript
function openKakao() {
|
|
const kakaoUrl = document.querySelector('[data-kakao-url]')?.dataset.kakaoUrl || '#';
|
|
if (kakaoUrl !== '#') {
|
|
window.open(kakaoUrl, '_blank');
|
|
} else {
|
|
alert('카카오톡 채널 URL이 설정되지 않았습니다.');
|
|
}
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const navbar = document.querySelector('.navbar');
|
|
if (!navbar) {
|
|
return;
|
|
}
|
|
|
|
const setShadow = () => {
|
|
navbar.style.boxShadow = window.scrollY > 0
|
|
? '0 2px 8px rgba(0,0,0,0.1)'
|
|
: '0 1px 3px rgba(0,0,0,0.1)';
|
|
};
|
|
|
|
setShadow();
|
|
window.addEventListener('scroll', setShadow, { passive: true });
|
|
});
|