Skip to content
Merged

Dev #26

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions Backend/internal/academic/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,11 @@ func UpdateSubject(c *gin.Context) {
c.JSON(404, gin.H{"failed update 1": "No data found"})
return
}
var input Subject
if err := c.ShouldBindJSON(&input); err != nil {
if err := c.ShouldBindJSON(&subject); err != nil {
c.JSON(400, gin.H{"failed update 2": err.Error()})
return
}
database.DB.Model(&subject).Updates(input)
database.DB.Model(&subject).Updates(subject)
c.JSON(200, gin.H{"message": "OK", "subject": subject})
}

Expand Down Expand Up @@ -151,12 +150,11 @@ func UpdateNote(c *gin.Context) {
c.JSON(404, gin.H{"message": err.Error()})
return
}
var input Note
if err := c.ShouldBindJSON(&input); err != nil {
if err := c.ShouldBindJSON(&note); err != nil {
c.JSON(400, gin.H{"message": err.Error()})
return
}
database.DB.Model(&note).Updates(input)
database.DB.Model(&note).Updates(note)
c.JSON(200, gin.H{"message": "OK", "note": note})
}

Expand Down
23 changes: 23 additions & 0 deletions Backend/internal/academic/router.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package academic

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

func RegisterRoutes(r *gin.RouterGroup) {
academic := r.Group("/academic")
{
academic.POST("/subjects", CreateSubject)
academic.GET("/subjects", GetSubject)
academic.PUT("/subjects/:id", UpdateSubject)
academic.DELETE("/subjects/:id", DeleteSubject)

academic.POST("/tasks", CreateTask)
academic.GET("/tasks", GetTask)
academic.PUT("/tasks/:id", UpdateTask)
academic.DELETE("/tasks/:id", DeleteTask)

academic.POST("/notes", CreateNote)
academic.GET("/notes", GetNotes)
academic.PUT("/notes/:id", UpdateNote)
academic.DELETE("/notes/:id", DeleteNote)
}
}
190 changes: 190 additions & 0 deletions Backend/internal/finance/handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
package finance

import (
"personal-erp-backend/database"

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

func GetCategory(c *gin.Context) {
var category []Category
userID, _ := c.Get("userID")
if err := database.DB.Where("user_id = ?", userID).Find(&category).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"fetch success": category})
}

func CreateCategory(c *gin.Context) {
var category Category
userID, exist := c.Get("userID")
if err := c.BindJSON(&category); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if exist {
category.UserID = uint(userID.(int))
}
if err := database.DB.Create(&category).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"create": category})
}

func UpdateCategory(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var category Category
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&category).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := c.BindJSON(&category); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if err := database.DB.Model(&category).Updates(category).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"update": category})
}

func DeleteCategory(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var category Category
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&category).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := database.DB.Delete(&category).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"delete": category})
}

func GetTransaction(c *gin.Context) {
var transaction []Transaction
userID, _ := c.Get("userID")
if err := database.DB.Where("user_id = ?", userID).Find(&transaction).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"fetch success": transaction})
}

func CreateTransaction(c *gin.Context) {
var transaction Transaction
userID, exist := c.Get("userID")
if err := c.BindJSON(&transaction); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if exist {
transaction.UserID = uint(userID.(int))
}
if err := database.DB.Create(&transaction).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"create": transaction})
}

func UpdateTransaction(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var transaction Transaction
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&transaction).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := c.BindJSON(&transaction); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if err := database.DB.Model(&transaction).Updates(transaction).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"update": transaction})
}

func DeleteTransaction(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var transaction Transaction
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&transaction).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := database.DB.Delete(&transaction).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"delete": transaction})
}

func GetGoal(c *gin.Context) {
var goal []Goal
userID, _ := c.Get("userID")
if err := database.DB.Where("user_id = ?", userID).Find(&goal).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"goals": goal})
}

func CreateGoal(c *gin.Context) {
var goal Goal
userID, exist := c.Get("userID")
if err := c.BindJSON(&goal); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if exist {
goal.UserID = uint(userID.(int))
}
if err := database.DB.Create(&goal).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"create": goal})
}

func UpdateGoal(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var goal Goal
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&goal).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := c.BindJSON(&goal); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
if err := database.DB.Model(&goal).Updates(goal).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"update": goal})
}

func DeleteGoal(c *gin.Context) {
id := c.Param("id")
userID, _ := c.Get("userID")
var goal Goal
if err := database.DB.Where("id = ? AND user_id = ?", id, userID).First(&goal).Error; err != nil {
c.JSON(404, gin.H{"error": err.Error()})
return
}
if err := database.DB.Delete(&goal).Error; err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
c.JSON(200, gin.H{"delete": goal})
}
31 changes: 31 additions & 0 deletions Backend/internal/finance/modelDB.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package finance

import "time"

type Category struct {
ID uint `gorm:"primary_key" json:"id"`
UserID uint `gorm:"index" json:"user_id"`
Name string `gorm:"size:255;not null" json:"name"`
Type string `gorm:"size:255;not null" json:"type"`
Bucket string `gorm:"size:255;not null" json:"bucket"`
}

type Transaction struct {
ID uint `gorm:"primary_key" json:"id"`
UserID uint `gorm:"index" json:"user_id"`
CategoryID uint `gorm:"index" json:"category_id"`
Category Category `gorm:"foreignkey:CategoryID" json:"category"`
Date time.Time `gorm:"not null" json:"date"`
Amount float64 `gorm:"not null" json:"amount"`
Description string `gorm:"size:255;" json:"description"`
}

type Goal struct {
ID uint `gorm:"primary_key" json:"id"`
UserID uint `gorm:"index" json:"user_id"`
Name string `gorm:"size:255;not null" json:"name"`
TargetAmount float64 `gorm:"not null" json:"target_amount"`
SavedAmount float64 `gorm:"not null" json:"saved_amount"`
Status string `gorm:"size:255;default:'active'" json:"status"`
Description string `gorm:"size:255;" json:"description"`
}
23 changes: 23 additions & 0 deletions Backend/internal/finance/router.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package finance

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

func RegisterRouter(r *gin.RouterGroup) {
finance := r.Group("/finance")
{
finance.GET("/category", GetCategory)
finance.POST("/category", CreateCategory)
finance.PUT("/category/:id", UpdateCategory)
finance.DELETE("/category/:id", DeleteCategory)

finance.GET("/transaction", GetTransaction)
finance.POST("/transaction", CreateTransaction)
finance.PUT("/transaction/:id", UpdateTransaction)
finance.DELETE("/transaction/:id", DeleteTransaction)

finance.GET("/goal", GetGoal)
finance.POST("/goal", CreateGoal)
finance.PUT("/goal/:id", UpdateGoal)
finance.DELETE("/goal/:id", DeleteGoal)
}
}
20 changes: 6 additions & 14 deletions Backend/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"personal-erp-backend/database"
"personal-erp-backend/internal/academic"
"personal-erp-backend/internal/auth"
"personal-erp-backend/internal/finance"
"time"

"github.com/gin-contrib/cors"
Expand All @@ -19,6 +20,9 @@ func main() {
&academic.Subject{},
&academic.Task{},
&academic.Note{},
&finance.Category{},
&finance.Transaction{},
&finance.Goal{},
)
if err != nil {
fmt.Println("gagal update database: ", err)
Expand All @@ -38,20 +42,8 @@ func main() {
api := r.Group("/api")
api.Use(auth.Middleware())
{
api.POST("/subjects", academic.CreateSubject)
api.GET("/subjects", academic.GetSubject)
api.PUT("/subjects/:id", academic.UpdateSubject)
api.DELETE("/subjects/:id", academic.DeleteSubject)

api.POST("/tasks", academic.CreateTask)
api.GET("/tasks", academic.GetTask)
api.PUT("/tasks/:id", academic.UpdateTask)
api.DELETE("/tasks/:id", academic.DeleteTask)

api.POST("/notes", academic.CreateNote)
api.GET("/notes", academic.GetNotes)
api.PUT("/notes/:id", academic.UpdateNote)
api.DELETE("/notes/:id", academic.DeleteNote)
academic.RegisterRoutes(api)
finance.RegisterRouter(api)
}

r.Run(":8080")
Expand Down
Loading