Skip to content

Commit 4da3b4e

Browse files
committed
Add player model
1 parent da2f9e4 commit 4da3b4e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+11105
-1
lines changed

Gopkg.lock

Lines changed: 34 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,15 @@
2828
[prune]
2929
go-tests = true
3030
unused-packages = true
31+
32+
[[constraint]]
33+
branch = "master"
34+
name = "github.com/jmoiron/sqlx"
35+
36+
[[constraint]]
37+
name = "github.com/stretchr/testify"
38+
version = "1.2.2"
39+
40+
[[constraint]]
41+
name = "gopkg.in/DATA-DOG/go-sqlmock.v1"
42+
version = "1.3.0"

models/player.go

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package models
2+
3+
import (
4+
"database/sql"
5+
"fmt"
6+
7+
"github.com/jmoiron/sqlx"
8+
)
9+
10+
// Player is a player on the roster
11+
type Player struct {
12+
ID int `db:"id" json:"id"`
13+
Name string `db:"name" json:"name"`
14+
Number string `db:"number" json:"number"`
15+
Position string `db:"position" json:"position"`
16+
Height string `db:"height" json:"height"`
17+
Weight string `db:"weight" json:"weight"`
18+
Age string `db:"age" json:"age"`
19+
Experience int `db:"experience" json:"experience"`
20+
College string `db:"college" json:"college"`
21+
}
22+
23+
// String returns a String version of a player
24+
func (p *Player) String() string {
25+
return fmt.Sprintf("[%d] %s (%s) -- #%s, %s, %slb, %syo, %dexp -- %s",
26+
p.ID,
27+
p.Name,
28+
p.Position,
29+
p.Number,
30+
p.Height,
31+
p.Weight,
32+
p.Age,
33+
p.Experience,
34+
p.College)
35+
}
36+
37+
// ListPlayers lists all the players, optionally restricted to a position
38+
func ListPlayers(db *sqlx.DB, position string) ([]Player, error) {
39+
var players []Player
40+
var err error
41+
if position == "" {
42+
err = db.Select(&players, "SELECT * FROM players ORDER BY number ASC")
43+
} else {
44+
err = db.Select(&players, "SELECT * FROM players WHERE position = $1 ORDER BY number ASC", position)
45+
}
46+
if err != nil {
47+
return nil, err
48+
}
49+
if len(players) == 0 {
50+
return nil, sql.ErrNoRows
51+
}
52+
return players, nil
53+
}
54+
55+
// GetPlayer gets a player by ID
56+
func GetPlayer(db *sqlx.DB, id int) (*Player, error) {
57+
player := Player{}
58+
err := db.Get(&player, "SELECT * FROM players WHERE id = $1", id)
59+
if err != nil {
60+
return nil, err
61+
}
62+
return &player, nil
63+
}
64+
65+
// Save saves a player (insert or update)
66+
func (p *Player) Save(db *sqlx.DB) (*Player, bool, error) {
67+
created := false
68+
var err error
69+
if p.ID <= 0 {
70+
err = p.create(db)
71+
created = err == nil
72+
} else {
73+
err = p.update(db)
74+
}
75+
return p, created, err
76+
}
77+
78+
// Delete deletes a player
79+
func (p *Player) Delete(db *sqlx.DB) error {
80+
result, err := db.Exec(`DELETE FROM players
81+
WHERE id=$1`,
82+
p.ID)
83+
if err != nil {
84+
return err
85+
}
86+
87+
count, err := result.RowsAffected()
88+
if err != nil {
89+
return err
90+
}
91+
92+
if count != 1 {
93+
return sql.ErrNoRows
94+
}
95+
96+
return nil
97+
}
98+
99+
func (p *Player) create(db *sqlx.DB) error {
100+
var id int
101+
err := db.QueryRow(`INSERT INTO players
102+
(name, number, position, height, weight, age, experience, college)
103+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
104+
RETURNING id`,
105+
p.Name, p.Number, p.Position, p.Height, p.Weight, p.Age, p.Experience, p.College).
106+
Scan(&id)
107+
if err != nil {
108+
return err
109+
}
110+
111+
p.ID = id
112+
return nil
113+
}
114+
115+
func (p *Player) update(db *sqlx.DB) error {
116+
result, err := db.Exec(`UPDATE players
117+
SET name=$1, number=$2, position=$3, height=$4, weight=$5, age=$6, experience=$7, college=$8
118+
WHERE id=$9`,
119+
p.Name, p.Number, p.Position, p.Height, p.Weight, p.Age, p.Experience, p.College, p.ID)
120+
if err != nil {
121+
return err
122+
}
123+
count, err := result.RowsAffected()
124+
if err != nil {
125+
return err
126+
}
127+
if count != 1 {
128+
return sql.ErrNoRows
129+
}
130+
return nil
131+
}

0 commit comments

Comments
 (0)