Vorbereitung Release 0.2.0 #83
@@ -12,7 +12,6 @@ import (
|
||||
"database/sql"
|
||||
|
||||
"github.com/uptrace/bun"
|
||||
"github.com/uptrace/bun/extra/bundebug"
|
||||
|
||||
"github.com/uptrace/bun/dialect/pgdialect"
|
||||
"github.com/uptrace/bun/driver/pgdriver"
|
||||
@@ -28,7 +27,7 @@ func GetTestDatabase() (*bun.DB, error) {
|
||||
sqldb.SetMaxIdleConns(4)
|
||||
|
||||
DB := bun.NewDB(sqldb, pgdialect.New())
|
||||
DB.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true)))
|
||||
// DB.AddQueryHook(bundebug.NewQueryHook(bundebug.WithVerbose(true)))
|
||||
|
||||
if err = DB.Ping(); err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/uptrace/bun"
|
||||
)
|
||||
|
||||
type Sport struct {
|
||||
bun.BaseModel `bun:"table:sport"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Teams []Team `bun:"rel:has-many,join:id=sport_id"`
|
||||
Positions []FieldPosition `bun:"rel:has-many,join:id=sport_id"`
|
||||
}
|
||||
|
||||
type Team struct {
|
||||
bun.BaseModel `bun:"table:team"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Name string `bun:"name"`
|
||||
Shortname string `bun:"short_name"`
|
||||
Roosters []Rooster `bun:"rel:has-many,join:id=team_id"`
|
||||
SportID *string `bun:"sport_id"`
|
||||
Sport *Sport `bun:"rel:belongs-to,join:sport_id=id"`
|
||||
}
|
||||
|
||||
type FieldPosition struct {
|
||||
bun.BaseModel `bun:"table:field_position"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Name string `bun:"name"`
|
||||
Shortname string `bun:"short_name"`
|
||||
SportID *string `bun:"sport_id"`
|
||||
Sport *Sport `bun:"rel:belongs-to,join:sport_id=id"`
|
||||
Roosters []Rooster `bun:"rel:has-many,join:id=position_id"`
|
||||
}
|
||||
|
||||
type Player struct {
|
||||
bun.BaseModel `bun:"table:player"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Firstname string `bun:"first_name"`
|
||||
Lastname string `bun:"last_name"`
|
||||
Roosters []Rooster `bun:"rel:has-many,join:id=player_id"`
|
||||
}
|
||||
|
||||
type Rooster struct {
|
||||
bun.BaseModel `bun:"table:rooster"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Year int `bun:"year"`
|
||||
TeamID *string `bun:"team_id"`
|
||||
Team *Team `bun:"rel:belongs-to,join:team_id=id"`
|
||||
PlayerID *string `bun:"player_id"`
|
||||
Player *Player `bun:"rel:belongs-to,join:player_id=id"`
|
||||
PositionID *string `bun:"position_id"`
|
||||
Position *FieldPosition `bun:"rel:belongs-to,join:position_id=id"`
|
||||
}
|
||||
|
||||
type CardSet struct {
|
||||
bun.BaseModel `bun:"table:card_set"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Name string `bun:"name"`
|
||||
ParallelSet bool `bun:"parallel_set"`
|
||||
InsertSet bool `bun:"insert_set"`
|
||||
VendorID *string `bun:"vendor_id"`
|
||||
Vendor *Vendor `bun:"rel:belongs-to,join:vendor_id=id"`
|
||||
}
|
||||
|
||||
type Vendor struct {
|
||||
bun.BaseModel `bun:"table:vendor"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
Name string `bun:"name"`
|
||||
CardSets []CardSet `bun:"rel:has-many,join:id=vendor_id"`
|
||||
}
|
||||
|
||||
type Card struct {
|
||||
bun.BaseModel `bun:"table:card"`
|
||||
|
||||
ID string `bun:"id,pk"`
|
||||
CreatedAt time.Time `bun:"created_date,nullzero,notnull,default:current_timestamp"`
|
||||
UpdatedAt time.Time `bun:"last_modified_date,nullzero,notnull,default:current_timestamp"`
|
||||
Version int `bun:"version,default:0"`
|
||||
CardNumber int `bun:"card_number"`
|
||||
Year int `bun:"year"`
|
||||
VendorID *string `bun:"vendor_id"`
|
||||
Vendor *Vendor `bun:"rel:belongs-to,join:vendor_id=id"`
|
||||
CardSetID *string `bun:"card_set_id"`
|
||||
CardSet *CardSet `bun:"rel:belongs-to,join:card_set_id=id"`
|
||||
RoosterID *string `bun:"rooster_id"`
|
||||
Rooster *Rooster `bun:"rel:belongs-to,join:rooster_id=id"`
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
package schema
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/uptrace/bun"
|
||||
)
|
||||
|
||||
func TestSelectSports(t *testing.T) {
|
||||
var sports []Sport
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&sports).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 4, len(sports))
|
||||
}
|
||||
|
||||
func TestSelectTeams(t *testing.T) {
|
||||
var teams []Team
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&teams).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 122, len(teams))
|
||||
}
|
||||
|
||||
func TestSelectFieldPositions(t *testing.T) {
|
||||
var positions []FieldPosition
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&positions).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 44, len(positions))
|
||||
}
|
||||
|
||||
func TestSelectPlayers(t *testing.T) {
|
||||
var players []Player
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&players).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 38, len(players))
|
||||
}
|
||||
|
||||
func TestSelectRoosters(t *testing.T) {
|
||||
var roosters []Rooster
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&roosters).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 11, len(roosters))
|
||||
}
|
||||
|
||||
func TestSelectVendors(t *testing.T) {
|
||||
var vendors []Vendor
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&vendors).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 9, len(vendors))
|
||||
}
|
||||
|
||||
func TestSelectCardSets(t *testing.T) {
|
||||
var cardSets []CardSet
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&cardSets).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 15, len(cardSets))
|
||||
}
|
||||
|
||||
func TestSelectCards(t *testing.T) {
|
||||
var cards []Card
|
||||
var err error
|
||||
var db *bun.DB
|
||||
ctx := context.Background()
|
||||
|
||||
db, err = GetTestDatabase()
|
||||
require.NoError(t, err)
|
||||
|
||||
err = db.NewSelect().Model(&cards).Scan(ctx)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 10, len(cards))
|
||||
}
|
||||
@@ -11,19 +11,17 @@ import jakarta.validation.constraints.NotNull;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Entity
|
||||
@Table(indexes = {@Index(columnList = "team_id, player_id, position_id")},
|
||||
uniqueConstraints = {@UniqueConstraint(name = "uniqueRooster", columnNames = {"year", "team_id", "player_id", "position_id"})}
|
||||
)
|
||||
@Table(indexes = { @Index(columnList = "team_id, player_id, position_id") }, uniqueConstraints = {
|
||||
@UniqueConstraint(name = "uniqueRooster", columnNames = { "year", "team_id", "player_id", "position_id" }) })
|
||||
public class Rooster extends AbstractEntity {
|
||||
|
||||
private int year;
|
||||
|
||||
|
||||
@ManyToOne
|
||||
@JoinColumn(name = "team_id")
|
||||
@NotNull
|
||||
|
||||
@@ -14,18 +14,15 @@ import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* Represents a vendor entity.
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Entity
|
||||
@Table(indexes = {@Index(columnList = "name")},
|
||||
uniqueConstraints = {@UniqueConstraint(columnNames = "name")}
|
||||
)
|
||||
@Table(indexes = { @Index(columnList = "name") }, uniqueConstraints = { @UniqueConstraint(columnNames = "name") })
|
||||
public class Vendor extends AbstractEntity {
|
||||
|
||||
@NotEmpty
|
||||
|
||||
Reference in New Issue
Block a user