api-qobiltu-dev / space /controller /cv /cv_controller.go
lifedebugger's picture
Deploy files from GitHub repository
c2003d2
package cv_controller
import (
"net/http"
"strconv"
"api.qobiltu.id/middleware"
"api.qobiltu.id/models"
"api.qobiltu.id/response"
"api.qobiltu.id/services"
"github.com/gin-gonic/gin"
)
type CVController interface {
SaveAccountDetails(ctx *gin.Context)
GetAccountDetails(ctx *gin.Context)
SavePersonalityAndPreference(ctx *gin.Context)
GetPersonalityAndPreference(ctx *gin.Context)
CreateFamilyMember(ctx *gin.Context)
UpdateFamilyMember(ctx *gin.Context)
ListFamilyMember(ctx *gin.Context)
GetFamilyMember(ctx *gin.Context)
DeleteFamilyMember(ctx *gin.Context)
SavePhysicalAndHealth(ctx *gin.Context)
GetPhysicalAndHealth(ctx *gin.Context)
SaveWorshipAndReligiousUnderstanding(ctx *gin.Context)
GetWorshipAndReligiousUnderstanding(ctx *gin.Context)
CreateEducation(ctx *gin.Context)
UpdateEducation(ctx *gin.Context)
ListEducation(ctx *gin.Context)
GetEducation(ctx *gin.Context)
DeleteEducation(ctx *gin.Context)
CreateJob(ctx *gin.Context)
UpdateJob(ctx *gin.Context)
ListJob(ctx *gin.Context)
GetJob(ctx *gin.Context)
DeleteJob(ctx *gin.Context)
CreateAchievement(ctx *gin.Context)
UpdateAchievement(ctx *gin.Context)
ListAchievement(ctx *gin.Context)
GetAchievement(ctx *gin.Context)
DeleteAchievement(ctx *gin.Context)
UploadProfileImage(ctx *gin.Context)
GetProgressCV(ctx *gin.Context)
}
type cvController struct {
cvService services.CVService
}
func NewCVController(cvService services.CVService) CVController {
return &cvController{
cvService: cvService,
}
}
// --- Account Details ---
func (c *cvController) SaveAccountDetails(ctx *gin.Context) {
var req models.SaveAccountDetailsRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.SaveAccountDetails(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Account details saved", res, nil)
}
func (c *cvController) GetAccountDetails(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.GetAccountDetailsRequest{
AccountID: accountID,
}
res, err := c.cvService.GetAccountDetails(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get account details success", res, nil)
}
// --- Personality & Preference ---
func (c *cvController) SavePersonalityAndPreference(ctx *gin.Context) {
var req models.SavePersonalityAndPreferenceRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.SavePersonalityAndPreference(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Personality and Preference saved", res, nil)
}
func (c *cvController) GetPersonalityAndPreference(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.GetPersonalityAndPreferenceRequest{
AccountID: accountID,
}
res, err := c.cvService.GetPersonalityAndPreference(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get Personality and Preference success", res, nil)
}
// --- Family Member ---
func (c *cvController) CreateFamilyMember(ctx *gin.Context) {
var req models.CreateFamilyMemberRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.CreateFamilyMember(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Family member saved", res, nil)
}
func (c *cvController) UpdateFamilyMember(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
var req models.UpdateFamilyMemberRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
req.ID = id
res, err := c.cvService.UpdateFamilyMember(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Family member updated", res, nil)
}
func (c *cvController) ListFamilyMember(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.ListFamilyMemberRequest{
AccountID: accountID,
}
list, err := c.cvService.ListFamilyMember(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "List family members", list, nil)
}
func (c *cvController) GetFamilyMember(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.GetFamilyMemberRequest{
ID: id,
}
res, err := c.cvService.GetFamilyMember(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get family member success", res, nil)
}
func (c *cvController) DeleteFamilyMember(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.DeleteFamilyMemberRequest{
ID: id,
}
err = c.cvService.DeleteFamilyMember(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Family member deleted", nil, nil)
}
// --- Physical and Health ---
func (c *cvController) SavePhysicalAndHealth(ctx *gin.Context) {
var req models.SavePhysicalAndHealthRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.SavePhysicalAndHealth(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Physical and health saved", res, nil)
}
func (c *cvController) GetPhysicalAndHealth(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.GetPhysicalAndHealthRequest{
AccountID: accountID,
}
res, err := c.cvService.GetPhysicalAndHealth(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get physical and health success", res, nil)
}
// --- Worship and Religious Understanding ---
func (c *cvController) SaveWorshipAndReligiousUnderstanding(ctx *gin.Context) {
var req models.SaveWorshipAndReligiousUnderstandingRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.SaveWorshipAndReligiousUnderstanding(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Worship and religious understanding saved", res, nil)
}
func (c *cvController) GetWorshipAndReligiousUnderstanding(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.GetWorshipAndReligiousUnderstandingRequest{
AccountID: accountID,
}
res, err := c.cvService.GetWorshipAndReligiousUnderstanding(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get worship and religious understanding success", res, nil)
}
// --- Education ---
func (c *cvController) CreateEducation(ctx *gin.Context) {
var req models.CreateEducationRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.CreateEducation(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Education created successfully", res, nil)
}
func (c *cvController) UpdateEducation(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
var req models.UpdateEducationRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
req.ID = id
res, err := c.cvService.UpdateEducation(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Education updated successfully", res, nil)
}
func (c *cvController) ListEducation(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.ListEducationRequest{
AccountID: accountID,
}
res, err := c.cvService.ListEducation(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "List of education retrieved successfully", res, nil)
}
func (c *cvController) GetEducation(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.GetEducationRequest{
ID: id,
}
res, err := c.cvService.GetEducation(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get education success", res, nil)
}
func (c *cvController) DeleteEducation(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.DeleteEducationRequest{
ID: id,
}
err = c.cvService.DeleteEducation(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Education deleted successfully", nil, nil)
}
// --- Job ---
func (c *cvController) CreateJob(ctx *gin.Context) {
var req models.CreateJobRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.CreateJob(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Job created successfully", res, nil)
}
func (c *cvController) UpdateJob(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
var req models.UpdateJobRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
req.ID = id
res, err := c.cvService.UpdateJob(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Job updated successfully", res, nil)
}
func (c *cvController) ListJob(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.ListJobRequest{
AccountID: accountID,
}
res, err := c.cvService.ListJob(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "List of jobs retrieved successfully", res, nil)
}
func (c *cvController) GetJob(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.GetJobRequest{
ID: id,
}
res, err := c.cvService.GetJob(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get job success", res, nil)
}
func (c *cvController) DeleteJob(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.DeleteJobRequest{
ID: id,
}
err = c.cvService.DeleteJob(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Job deleted successfully", nil, nil)
}
// --- Achievement ---
func (c *cvController) CreateAchievement(ctx *gin.Context) {
var req models.CreateAchievementRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
accountData := middleware.GetAccountData(ctx)
req.AccountID = int64(accountData.UserID)
res, err := c.cvService.CreateAchievement(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Achievement created successfully", res, nil)
}
func (c *cvController) UpdateAchievement(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
var req models.UpdateAchievementRequest
if err := ctx.ShouldBindJSON(&req); err != nil {
response.HandleError(ctx, err)
return
}
req.ID = id
res, err := c.cvService.UpdateAchievement(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Achievement updated successfully", res, nil)
}
func (c *cvController) ListAchievement(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.ListAchievementRequest{
AccountID: accountID,
}
res, err := c.cvService.ListAchievement(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "List of achievements retrieved successfully", res, nil)
}
func (c *cvController) GetAchievement(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.GetAchievementRequest{
ID: id,
}
res, err := c.cvService.GetAchievement(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Get achievement success", res, nil)
}
func (c *cvController) DeleteAchievement(ctx *gin.Context) {
idStr := ctx.Param("id")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
response.HandleError(ctx, err)
return
}
req := models.DeleteAchievementRequest{
ID: id,
}
err = c.cvService.DeleteAchievement(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Achievement deleted successfully", nil, nil)
}
func (c *cvController) UploadProfileImage(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
avatarFile, _ := ctx.FormFile("avatar")
req := models.UploadProfileImageRequest{
AccountID: int64(accountData.UserID),
File: avatarFile,
}
res, err := c.cvService.UploadProfileImage(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Profile image uploaded successfully", res, nil)
}
func (c *cvController) GetProgressCV(ctx *gin.Context) {
accountData := middleware.GetAccountData(ctx)
accountID := int64(accountData.UserID)
req := models.GetProgressCVRequest{
AccountID: accountID,
}
res, err := c.cvService.GetProgressCV(ctx, &req)
if err != nil {
response.HandleError(ctx, err)
return
}
response.HandleSuccess(ctx, http.StatusOK, "Progress retrieved successfully", res, nil)
}