Skip to content

Commit ea6c898

Browse files
committed
Add fiber-swagger
1 parent 81a5671 commit ea6c898

11 files changed

Lines changed: 1567 additions & 48 deletions

File tree

controllers/transation.controller.go

Lines changed: 85 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,27 @@ import (
1313
"gorm.io/gorm"
1414
)
1515

16+
// CreateTransaction creates a new transaction.
17+
//
18+
// @Summary Create a new transaction
19+
// @Description Create a new transaction
20+
// @Tags Transactions
21+
// @Accept json
22+
// @Produce json
23+
// @Router /transactions [post]
24+
// @Param transaction body models.CreateTransactionSchema true "Transaction"
25+
// @Success 200 {object} models.JSONDataResult{data=[]database.Transaction}
26+
// @Failure 500 {object} models.JSONCodeResult{}
27+
// @Failure 502 {object} models.JSONCodeResult{}
1628
func CreateTransaction(c *fiber.Ctx) error {
1729
var payload *models.CreateTransactionSchema
1830
if err := c.BodyParser(&payload); err != nil {
19-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"status": "fail", "message": err.Error()})
31+
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"code": 500, "status": "fail", "message": err.Error()})
2032
}
2133

2234
errors := models.ValidateStruct(payload)
2335
if errors != nil {
2436
return c.Status(fiber.StatusBadRequest).JSON(errors)
25-
2637
}
2738

2839
now := time.Now()
@@ -41,18 +52,32 @@ func CreateTransaction(c *fiber.Ctx) error {
4152
result := initializers.DB.Create(&newTransaction)
4253

4354
if result.Error != nil {
44-
return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"status": "error", "message": result.Error.Error()})
55+
return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{"code": 500, "status": "error", "message": result.Error.Error()})
4556
}
4657

47-
return c.Status(fiber.StatusCreated).JSON(fiber.Map{"status": "success", "data": fiber.Map{"transaction": newTransaction}})
58+
return c.Status(fiber.StatusCreated).JSON(fiber.Map{"code": 200, "status": "success", "data": newTransaction, "message": "Transaction created successfully"})
4859
}
4960

61+
// UpdateTransaction updates a transaction by ID.
62+
//
63+
// @Summary Update a transaction by ID
64+
// @Description Update a transaction by its unique ID
65+
// @Tags Transactions
66+
// @Accept json
67+
// @Produce json
68+
// @Router /transactions/{transactionsId} [put]
69+
// @Param transactionsId path int true "Transaction ID"
70+
// @Param transaction body models.UpdateTransactionSchema true "Transaction"
71+
// @Success 200 {object} models.JSONDataResult{data=[]models.UpdateTransactionSchema}
72+
// @Failure 500 {object} models.JSONCodeResult{}
73+
// @Failure 502 {object} models.JSONCodeResult{}
74+
// @Failure 404 {object} models.JSONCodeResult{}
5075
func UpdateTransaction(c *fiber.Ctx) error {
5176
idStr := c.Params("transactionsId")
5277

5378
var payload models.UpdateTransactionSchema
5479
if err := c.BodyParser(&payload); err != nil {
55-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"status": "fail", "message": "Error parsing body: " + err.Error()})
80+
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Error parsing body: " + err.Error()})
5681
}
5782

5883
errors := models.ValidateStruct(payload)
@@ -65,9 +90,9 @@ func UpdateTransaction(c *fiber.Ctx) error {
6590

6691
if result.Error != nil {
6792
if result.Error == gorm.ErrRecordNotFound {
68-
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"status": "fail", "message": "No note with that Id exists"})
93+
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"code": 404, "status": "fail", "message": "No note with that Id exists"})
6994
}
70-
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"status": "fail", "message": "Error fetching transaction:" + result.Error.Error()})
95+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Error fetching transaction:" + result.Error.Error()})
7196
}
7297

7398
transaction.Title = payload.Title
@@ -78,46 +103,67 @@ func UpdateTransaction(c *fiber.Ctx) error {
78103
transaction.ToUser = payload.ToUser
79104

80105
if err := initializers.DB.Save(&transaction).Error; err != nil {
81-
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"status": "fail", "message": "Failed to update transaction: " + err.Error()})
106+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Failed to update transaction: " + err.Error()})
82107
}
83108

84-
return c.Status(fiber.StatusOK).JSON(fiber.Map{"status": "success", "data": transaction})
109+
return c.Status(fiber.StatusOK).JSON(fiber.Map{"code": 200, "status": "success", "message": "Transaction updated successfully", "data": transaction})
85110
}
86111

112+
// FindTransactionById finds a transaction by ID.
113+
//
114+
// @Summary Find a transaction by ID
115+
// @Description Find a transaction by its unique ID
116+
// @Tags Transactions
117+
// @Accept json
118+
// @Produce json
119+
// @Router /transactions/{transactionsId} [get]
120+
// @Param transactionsId path int true "Transaction ID"
121+
// @Success 200 {object} models.JSONDataResult{data=[]database.Transaction}
122+
// @Failure 500 {object} models.JSONCodeResult{}
123+
// @Failure 404 {object} models.JSONCodeResult{}
87124
func FindTransactionById(c *fiber.Ctx) error {
88125
idStr := c.Params("transactionsId")
89126

90127
id, err := strconv.ParseUint(idStr, 10, 64)
91128

92129
if err != nil {
93-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
94-
"message": "Invalid ID",
95-
})
130+
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Invalid ID"})
96131
}
97132

98133
var transaction database.Transaction
99-
transaction.ID = uint(id)
100-
initializers.DB.First(&transaction)
134+
result := initializers.DB.First(&transaction, id)
101135

102-
return c.Status(fiber.StatusOK).JSON(fiber.Map{"status": "success", "data": transaction})
136+
if result.RowsAffected == 0 {
137+
return c.Status(fiber.StatusNotFound).JSON(fiber.Map{"code": 404, "status": "fail", "message": "Transaction not found"})
138+
}
139+
140+
return c.Status(fiber.StatusOK).JSON(fiber.Map{"code": 200, "status": "success", "message": "Transaction found", "data": transaction})
103141
}
104142

143+
// ListTransactions lists transactions with pagination.
144+
//
145+
// @Summary List transactions with pagination
146+
// @Description List transactions with pagination
147+
// @Tags Transactions
148+
// @Accept json
149+
// @Produce json
150+
// @Router /transactions [get]
151+
// @Param page query int false "Page number"
152+
// @Param limit query int false "Number of items per page"
153+
// @Success 200 {object} models.JSONDataResultWithPagination{data=[]database.Transaction}
154+
// @Failure 500 {object} models.JSONCodeResult{}
105155
func ListTransactions(c *fiber.Ctx) error {
106156
var page = c.Query("page", "1")
107157
var limit = c.Query("limit", "10")
108158

109159
intPage, err := strconv.Atoi(page)
110160
if err != nil {
111-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
112-
"message": "Invalid page value",
113-
})
161+
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Invalid page value"})
114162
}
115163

116164
intLimit, err := strconv.Atoi(limit)
117165
if err != nil {
118-
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
119-
"message": "Invalid limit value",
120-
})
166+
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Invalid limit value"})
121167
}
122168

123169
offset := (intPage - 1) * intLimit
@@ -129,6 +175,7 @@ func ListTransactions(c *fiber.Ctx) error {
129175
initializers.DB.Model(&database.Transaction{}).Count(&count)
130176

131177
return c.Status(fiber.StatusOK).JSON(fiber.Map{
178+
"code": 200,
132179
"status": "success",
133180
"data": transactions,
134181
"offset": offset,
@@ -137,26 +184,36 @@ func ListTransactions(c *fiber.Ctx) error {
137184
})
138185
}
139186

187+
// DeleteTransaction deletes a transaction by ID godoc
188+
//
189+
// @Summary Delete a transaction by ID
190+
// @Description Delete a transaction by its unique ID
191+
// @Tags Transactions
192+
// @Accept json
193+
// @Produce json
194+
// @Router /transactions/:transactionsId [delete]
195+
// @Param id path int true "transaction ID"
196+
// @Success 200 {object} models.JSONCodeResult{}
197+
// @Failure 404 {object} models.JSONCodeResult{}
198+
// @Failure 500 {object} models.JSONCodeResult{}
140199
func DeleteTransaction(c *fiber.Ctx) error {
141200
idStr := c.Params("transactionsId")
142201

143202
id, err := strconv.ParseUint(idStr, 10, 64)
144203
if err != nil {
145204
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{
146-
"message": "Invalid ID",
205+
"code": 404,
206+
"status": "fail",
207+
"message": "No note with that Id exists",
147208
})
148209
}
149210

150211
var transaction database.Transaction
151212
transaction.ID = uint(id)
152213
result := initializers.DB.Delete(&transaction)
153214
if result.Error != nil {
154-
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
155-
"message": "Failed to delete transaction",
156-
})
215+
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"code": 500, "status": "fail", "message": "Failed to delete transaction"})
157216
}
158217

159-
return c.Status(fiber.StatusOK).JSON(fiber.Map{
160-
"message": "Transaction successfully deleted",
161-
})
218+
return c.Status(fiber.StatusOK).JSON(fiber.Map{"code": 200, "status": "success", "message": "Transaction successfully deleted"})
162219
}

database/schema/schema.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import (
77
"gorm.io/gorm"
88
)
99

10+
// Account Transaction info
11+
// @Description Transaction information
1012
type Transaction struct {
1113
ID uint `gorm:"primaryKey;autoIncrement"`
1214
Title string `gorm:"size:255;not null"`
@@ -18,7 +20,7 @@ type Transaction struct {
1820
ToUser string `gorm:"size:100;not null"`
1921
CreatedAt time.Time
2022
UpdatedAt time.Time
21-
}
23+
} //@name Transaction
2224

2325
func CreateTransactionTable(DB *gorm.DB) {
2426
DB.Migrator().CreateTable(&Transaction{})

0 commit comments

Comments
 (0)