File size: 2,412 Bytes
20cba6d
 
 
 
 
f14a735
 
 
20cba6d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package controllers

import (
	"net/http"

	"situkang/dto"
	"situkang/services"
	"situkang/utils"

	"github.com/gin-gonic/gin"
)

type AuthController interface {
	Register(ctx *gin.Context)
	Login(ctx *gin.Context)
	Refresh(ctx *gin.Context)
	Logout(ctx *gin.Context)
	ForgotPassword(ctx *gin.Context)
	ResetPassword(ctx *gin.Context)
}

type authController struct {
	authService services.AuthService
}

func NewAuthController(authService services.AuthService) AuthController {
	return &authController{authService: authService}
}

func (ac *authController) Register(ctx *gin.Context) {
	req := RequestJSON[dto.AuthRegisterRequest](ctx)
	if ctx.IsAborted() {
		return
	}
	data, err := ac.authService.Register(ctx, req)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusCreated, "Registrasi berhasil", data, nil)
}

func (ac *authController) Login(ctx *gin.Context) {
	req := RequestJSON[dto.AuthLoginRequest](ctx)
	if ctx.IsAborted() {
		return
	}
	data, err := ac.authService.Login(ctx, req)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusOK, "", data, nil)
}

func (ac *authController) Refresh(ctx *gin.Context) {
	req := RequestJSON[dto.AuthRefreshRequest](ctx)
	if ctx.IsAborted() {
		return
	}
	data, err := ac.authService.Refresh(ctx, req)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusOK, "", data, nil)
}

func (ac *authController) Logout(ctx *gin.Context) {
	err := ac.authService.Logout(ctx)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusOK, "Berhasil logout", gin.H{}, nil)
}

func (ac *authController) ForgotPassword(ctx *gin.Context) {
	req := RequestJSON[dto.AuthForgotPasswordRequest](ctx)
	if ctx.IsAborted() {
		return
	}
	err := ac.authService.ForgotPassword(ctx, req)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusOK, "Link reset password telah dikirim", gin.H{}, nil)
}

func (ac *authController) ResetPassword(ctx *gin.Context) {
	req := RequestJSON[dto.AuthResetPasswordRequest](ctx)
	if ctx.IsAborted() {
		return
	}
	err := ac.authService.ResetPassword(ctx, req)
	if err != nil {
		utils.ResponseFAILED(ctx, nil, err)
		return
	}
	utils.JSONSuccess(ctx, http.StatusOK, "Password berhasil direset", gin.H{}, nil)
}