From 639e75dd6cdbd1a3dd2f2d89003774d7b73ddbf2 Mon Sep 17 00:00:00 2001 From: lbenedar Date: Tue, 17 Mar 2026 17:58:22 +0300 Subject: [PATCH] ch7.1 --- cmd/api/main.go | 3 +++ internal/data/models.go | 31 +++++++++++++++++++++++++++++++ internal/data/movies.go | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 internal/data/models.go diff --git a/cmd/api/main.go b/cmd/api/main.go index 85cbdea..6302119 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -10,6 +10,7 @@ import ( "os" "time" + "gitea.local.lab/Lbenedar/greenlight/internal/data" _ "github.com/lib/pq" ) @@ -18,6 +19,7 @@ const version = "1.0.0" type application struct { config config logger *log.Logger + models data.Models } type config struct { @@ -81,6 +83,7 @@ func main() { app := &application{ config: cfg, logger: logger, + models: data.NewModels(db), } srv := &http.Server{ diff --git a/internal/data/models.go b/internal/data/models.go new file mode 100644 index 0000000..b549650 --- /dev/null +++ b/internal/data/models.go @@ -0,0 +1,31 @@ +package data + +import ( + "database/sql" + "errors" +) + +var ( + ErrRecordNotFound = errors.New("record not found") +) + +type Models struct { + Movies interface { + Insert(movie *Movie) error + Get(id int64) (*Movie, error) + Update(movie *Movie) error + Delete(id int64) error + } +} + +func NewModels(db *sql.DB) Models { + return Models{ + Movies: MovieModel{DB: db}, + } +} + +func NewMockModels() Models { + return Models{ + Movies: MockMovieModel{}, + } +} diff --git a/internal/data/movies.go b/internal/data/movies.go index 1863222..1680787 100644 --- a/internal/data/movies.go +++ b/internal/data/movies.go @@ -1,11 +1,16 @@ package data import ( + "database/sql" "time" "gitea.local.lab/Lbenedar/greenlight/internal/validator" ) +type MovieModel struct { + DB *sql.DB +} + type Movie struct { ID int64 `json:"id"` CreatedAt time.Time `json:"-"` @@ -16,6 +21,40 @@ type Movie struct { Version int32 `json:"version"` } +func (m MovieModel) Insert(movie *Movie) error { + return nil +} + +func (m MovieModel) Get(id int64) (*Movie, error) { + return nil, nil +} + +func (m MovieModel) Update(movie *Movie) error { + return nil +} + +func (m MovieModel) Delete(id int64) error { + return nil +} + +type MockMovieModel struct{} + +func (m MockMovieModel) Insert(movie *Movie) error { + return nil +} + +func (m MockMovieModel) Get(id int64) (*Movie, error) { + return nil, nil +} + +func (m MockMovieModel) Update(movie *Movie) error { + return nil +} + +func (m MockMovieModel) Delete(id int64) error { + return nil +} + func ValidateMovie(v *validator.Validator, movie *Movie) { v.Check(movie.Title != "", "title", "must be provided") v.Check(len(movie.Title) <= 500, "title", "must not be more than 500 bytes long")