Skip to content

Commit 5ac49f5

Browse files
committed
final touches
1 parent 2223368 commit 5ac49f5

6 files changed

Lines changed: 81 additions & 60 deletions

File tree

bet/bet.go

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import (
55

66
"github.com/gin-gonic/gin"
77
"github.com/ventcode/betsy-backend/models"
8-
"github.com/ventcode/betsy-backend/user"
98
"gorm.io/gorm"
109
)
1110

1211
type BetCreate struct {
13-
UserID int `json:"user_id" binding:"required"`
14-
ChallengeID int `json:"challenge_id" binding:"required"`
12+
UserID int `json:"user_id" binding:"required"`
13+
ChallengeID int `json:"challenge_id" binding:"required"`
1514
BetOnChallenger *bool `json:"bet_on_challenger" binding:"required"`
16-
Amount uint `json:"amount" binding:"required,gt=0"`
15+
Amount uint `json:"amount" binding:"required,gt=0"`
1716
}
1817

1918
func Create(c *gin.Context, db *gorm.DB) {
@@ -24,34 +23,34 @@ func Create(c *gin.Context, db *gorm.DB) {
2423
return
2524
}
2625

27-
b := &models.Bet{}
28-
ra := db.Find(b, "challenge_id = ? AND user_id = ?", bc.ChallengeID, bc.UserID).RowsAffected
26+
b := &models.Bet{}
27+
ra := db.Find(b, "challenge_id = ? AND user_id = ?", bc.ChallengeID, bc.UserID).RowsAffected
2928
if ra > 0 {
3029
c.JSON(http.StatusBadRequest, gin.H{"error": "Bet for this challenge already exists"})
3130
return
3231
}
3332

3433
var chal models.Challenge
3534
rows_affected := db.Find(&chal, bc.ChallengeID).RowsAffected
36-
if rows_affected == 0 {
37-
c.JSON(http.StatusBadRequest, gin.H{"error": "Cannot find challenge that allows for betting"})
38-
return
39-
}
35+
if rows_affected == 0 {
36+
c.JSON(http.StatusBadRequest, gin.H{"error": "Cannot find challenge that allows for betting"})
37+
return
38+
}
4039

41-
usr := &user.User{}
40+
usr := &models.User{}
4241
rows_affected = db.Find(&usr, bc.UserID).RowsAffected
43-
if rows_affected == 0 {
44-
c.JSON(http.StatusBadRequest, gin.H{"error": "Cannot find user"})
45-
return
46-
}
47-
48-
bet := &models.Bet{
49-
UserID: bc.UserID,
50-
User: *usr,
51-
ChallengeID: bc.ChallengeID,
52-
Amount: bc.Amount,
53-
BetOnChallenger: *bc.BetOnChallenger,
54-
}
42+
if rows_affected == 0 {
43+
c.JSON(http.StatusBadRequest, gin.H{"error": "Cannot find user"})
44+
return
45+
}
46+
47+
bet := &models.Bet{
48+
UserID: bc.UserID,
49+
User: *usr,
50+
ChallengeID: bc.ChallengeID,
51+
Amount: bc.Amount,
52+
BetOnChallenger: *bc.BetOnChallenger,
53+
}
5554
err := db.Create(&bet).Error
5655

5756
if err != nil {
@@ -60,3 +59,17 @@ func Create(c *gin.Context, db *gorm.DB) {
6059
c.JSON(http.StatusCreated, bet)
6160
}
6261
}
62+
63+
func Show(c *gin.Context, db *gorm.DB) {
64+
var bet models.Bet
65+
66+
id, _ := c.Params.Get("id")
67+
rows_affected := db.Preload("User").Preload("Challenge").Find(&bet, id).RowsAffected
68+
69+
if rows_affected == 0 {
70+
c.JSON(http.StatusUnprocessableEntity, "Bet not found")
71+
return
72+
} else {
73+
c.JSON(http.StatusOK, gin.H{"bet": bet})
74+
}
75+
}

challenge/challenge.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import (
55

66
"github.com/gin-gonic/gin"
77
"github.com/ventcode/betsy-backend/models"
8-
"github.com/ventcode/betsy-backend/user"
98
"gorm.io/gorm"
109
)
1110

1211
func Show(c *gin.Context, db *gorm.DB) {
1312
var cha models.Challenge
1413

1514
id, _ := c.Params.Get("id")
16-
rows_affected := db.Find(&cha, id).RowsAffected
15+
rows_affected := db.Preload("Challenger").Preload("Challenged").Preload("Bets").Preload("Bets.User").Find(&cha, id).RowsAffected
1716

1817
if rows_affected == 0 {
1918
c.JSON(http.StatusUnprocessableEntity, "Challenge not found")
@@ -109,7 +108,7 @@ type CreateChallengeInput struct {
109108
ChallengedID *int `json:"challenged_id" binding:"required"`
110109
}
111110

112-
func NewChallenge(challInp *CreateChallengeInput, challenger, challenged *user.User) *models.Challenge {
111+
func NewChallenge(challInp *CreateChallengeInput, challenger, challenged *models.User) *models.Challenge {
113112
return &models.Challenge{
114113
Title: challInp.Title,
115114
Amount: *challInp.Amount,
@@ -132,14 +131,14 @@ func Create(c *gin.Context, db *gorm.DB) {
132131
return
133132
}
134133

135-
challenger := &user.User{}
134+
challenger := &models.User{}
136135
ra := db.Find(challenger, input.ChallengerID).RowsAffected
137136
if ra == 0 {
138137
c.JSON(http.StatusNotFound, "Challenger user of provided specified id does not exist")
139138
return
140139
}
141140

142-
challenged := &user.User{}
141+
challenged := &models.User{}
143142
ra = db.Find(challenged, input.ChallengedID).RowsAffected
144143
if ra == 0 {
145144
c.JSON(http.StatusNotFound, "Challenged user of provided specified id does not exist")
@@ -159,7 +158,7 @@ func Create(c *gin.Context, db *gorm.DB) {
159158

160159
type UpdateChallengeInput struct {
161160
Status models.ChallengeStatus `json:"status" binding:"required,max=4,min=0"`
162-
WinnerID *uint `json:"winner_id"`
161+
WinnerID *uint `json:"winner_id"`
163162
}
164163

165164
func Update(c *gin.Context, db *gorm.DB) {

main.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ var appConfig = SetAppConfig()
1818
func main() {
1919
// Database
2020
db := DatabaseConnection()
21-
err := db.AutoMigrate(&user.User{}, &models.Challenge{}, &models.Bet{})
21+
err := db.AutoMigrate(&models.User{}, &models.Challenge{}, &models.Bet{})
2222
if err != nil {
2323
log.Fatal(err)
2424
}
@@ -35,12 +35,14 @@ func main() {
3535
router.Use(MiddlewareSetDB(db))
3636

3737
// Routes
38+
router.GET("/user", useDB(user.Show))
3839
router.GET("/users", useDB(user.Index))
40+
router.GET("/users/:id/bets", useDB(user.GetBets))
3941
router.GET("/challenges", useDB(challenge.Index))
4042
router.GET("/challenges/:id", useDB(challenge.Show))
41-
router.GET("/user", useDB(user.Show))
4243
router.POST("/challenges", useDB(challenge.Create))
4344
router.PATCH("/challenges/:id", useDB(challenge.Update))
45+
router.GET("/bets/:id", useDB(bet.Show))
4446
router.POST("/bets", useDB(bet.Create))
4547
router.Run()
4648
}

models/models.go

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package models
22

33
import (
44
"github.com/ventcode/betsy-backend/common"
5-
"github.com/ventcode/betsy-backend/user"
65
)
76

87
type ChallengeStatus int
@@ -15,25 +14,31 @@ const (
1514
Rejected
1615
)
1716

17+
type User struct {
18+
common.Model
19+
ExternalId string `gorm:"not null;unique" json:"external_id"`
20+
MoneyAmount uint `gorm:"not null;default:0" json:"money_amount"`
21+
}
22+
1823
type Challenge struct {
1924
common.Model
20-
ChallengerID int `gorm:"not null" json:"-"`
21-
Challenger user.User `json:"challenger"`
22-
ChallengedID int `gorm:"not null" json:"-"`
23-
Challenged user.User `json:"challenged"`
24-
Title string `gorm:"not null" json:"title"`
25-
Amount uint `gorm:"not null;default:0" json:"amount"`
26-
Status ChallengeStatus `gorm:"not null;default:0" json:"status"`
27-
ChallengerWon *bool `json:"challenger_won"`
28-
Bets []Bet `json:"bets"`
25+
ChallengerID int `gorm:"not null" json:"-"`
26+
Challenger User `json:"challenger"`
27+
ChallengedID int `gorm:"not null" json:"-"`
28+
Challenged User `json:"challenged"`
29+
Title string `gorm:"not null" json:"title"`
30+
Amount uint `gorm:"not null;default:0" json:"amount"`
31+
Status ChallengeStatus `gorm:"not null;default:0" json:"status"`
32+
ChallengerWon *bool `json:"challenger_won"`
33+
Bets []Bet `json:"bets"`
2934
}
3035

3136
type Bet struct {
3237
common.Model
33-
UserID int `gorm:"not null"json:"-"`
34-
User user.User `json:"user"`
35-
ChallengeID int `gorm:"not null"json:"challenge_id"`
38+
UserID int `gorm:"not null" json:"-"`
39+
User User `json:"user"`
40+
ChallengeID int `gorm:"not null" json:"challenge_id"`
3641
Challenge Challenge `json:"-"`
37-
BetOnChallenger bool `gorm:"not null"json:"bet_on_challenger"`
38-
Amount uint `gorm:"not null;check:amount > 0"json:"amount"`
42+
BetOnChallenger bool `gorm:"not null" json:"bet_on_challenger"`
43+
Amount uint `gorm:"not null;check:amount > 0" json:"amount"`
3944
}

seeds.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ import (
55
"math/rand"
66

77
"github.com/ventcode/betsy-backend/models"
8-
"github.com/ventcode/betsy-backend/user"
98
"gorm.io/gorm"
109
)
1110

1211
func SeedUsers(db *gorm.DB) {
13-
users := []user.User{
12+
users := []models.User{
1413
{ExternalId: "greatGoogleId1", MoneyAmount: 1000},
1514
{ExternalId: "greatGoogleId2", MoneyAmount: 1000},
1615
{ExternalId: "greatGoogleId3", MoneyAmount: 1000},
@@ -28,11 +27,11 @@ func SeedUsers(db *gorm.DB) {
2827
}
2928

3029
func SeedChallenges(db *gorm.DB) {
31-
var users []user.User
30+
var users []models.User
3231
db.Order("RANDOM()").Limit(5).Find(&users)
3332

3433
for i, challenger := range users {
35-
var challenged user.User
34+
var challenged models.User
3635
if i == len(users)-1 {
3736
challenged = users[0]
3837
} else {
@@ -49,7 +48,7 @@ func SeedChallenges(db *gorm.DB) {
4948
}
5049

5150
func SeedBets(db *gorm.DB) {
52-
var users []user.User
51+
var users []models.User
5352
db.Order("RANDOM()").Limit(5).Find(&users)
5453

5554
var challenges []models.Challenge

user/user.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,18 @@ import (
55
"net/http"
66

77
"github.com/gin-gonic/gin"
8-
"github.com/ventcode/betsy-backend/common"
8+
"github.com/ventcode/betsy-backend/models"
99
"gorm.io/gorm"
1010
)
1111

1212
const googleUrl = "https://www.googleapis.com/oauth2/v3/userinfo"
1313

14-
type User struct {
15-
common.Model
16-
ExternalId string `gorm:"not null;unique" json:"external_id"`
17-
MoneyAmount uint `gorm:"not null;default:0" json:"money_amount"`
18-
}
19-
2014
type UserResponse struct {
2115
Sub string
2216
}
2317

2418
func Index(c *gin.Context, db *gorm.DB) {
25-
var users []User
19+
var users []models.User
2620
result := db.Find(&users)
2721
if result.Error != nil {
2822
c.JSON(500, gin.H{"error": "Failed to fetch users"})
@@ -57,7 +51,7 @@ func Show(c *gin.Context, db *gorm.DB) {
5751
}
5852
}
5953

60-
user := User{}
54+
user := models.User{}
6155
result := db.Find(&user, "external_id = ?", parsedResponse.Sub)
6256

6357
if result.RowsAffected == 0 {
@@ -73,3 +67,12 @@ func Show(c *gin.Context, db *gorm.DB) {
7367
c.JSON(http.StatusOK, user)
7468
}
7569
}
70+
71+
func GetBets(c *gin.Context, db *gorm.DB) {
72+
var bets []models.Bet
73+
id, _ := c.Params.Get("id")
74+
75+
db.Preload("Challenge").Preload("User").Where("user_id = ?", id).Find(&bets)
76+
77+
c.JSON(http.StatusOK, gin.H{"data": bets})
78+
}

0 commit comments

Comments
 (0)