Updating movies.go with MovieModel: this struct is the gateway between our app and the database. Adding CRUD methods alongside for the Movie object. Creating models.go: this file holds a Models struct wrapping all of our Models. This way, we are able to use in our application struct in our main.go.

This commit is contained in:
Maxime Delporte
2025-11-06 10:41:12 +01:00
parent 0874a6aac4
commit 1a658d3063
3 changed files with 55 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ import (
"database/sql" "database/sql"
"flag" "flag"
"fmt" "fmt"
"greenlight.craftr.fr/internal/data"
"log/slog" "log/slog"
"net/http" "net/http"
"os" "os"
@@ -40,13 +41,11 @@ type config struct {
} }
} }
/* // application struct hold the dependencies for our HTTP handlers, helpers, and middleware.
Define an application struct to hold the dependencies for our HTTP handlers, helpers,
and middleware.
*/
type application struct { type application struct {
config config config config
logger *slog.Logger logger *slog.Logger
models data.Models
} }
func main() { func main() {
@@ -91,6 +90,7 @@ func main() {
app := &application{ app := &application{
config: cfg, config: cfg,
logger: logger, logger: logger,
models: data.NewModels(db),
} }
/* /*

23
internal/data/models.go Normal file
View File

@@ -0,0 +1,23 @@
package data
import (
"database/sql"
"errors"
)
// ErrRecordNotFound : Define a custom ErrRecordNotFound error. We'll return this from our Get() method when looking up a movie that doesn't exist in our database.
var (
ErrRecordNotFound = errors.New("record not found")
)
// Models : Wraps the MovieModel. We'll add other models to this, like a UserModel and PermissionModel, as our build progresses.
type Models struct {
Movies MovieModel
}
// NewModels : For ease of use, this method returns a Models struct containing the initialized MovieModel.
func NewModels(db *sql.DB) Models {
return Models{
Movies: MovieModel{DB: db},
}
}

View File

@@ -1,8 +1,10 @@
package data package data
import ( import (
"greenlight.craftr.fr/internal/validator" "database/sql"
"time" "time"
"greenlight.craftr.fr/internal/validator"
) )
// Movie // Movie
@@ -41,3 +43,28 @@ func ValidateMovie(v *validator.Validator, movie *Movie) {
// Not that we're using the Unique helper in the line below to check that all values in the input.Genres slice are unique // Not that we're using the Unique helper in the line below to check that all values in the input.Genres slice are unique
v.Check(validator.Unique(movie.Genres), "genres", "must not contain duplicate values") v.Check(validator.Unique(movie.Genres), "genres", "must not contain duplicate values")
} }
// MovieModel struct type wraps a sql.DB connection pool
type MovieModel struct {
DB *sql.DB
}
// Insert : Inserting a new record in the movies table
func (m MovieModel) Insert(movie *Movie) error {
return nil
}
// Get : Fetching a specific record from the movies table
func (m MovieModel) Get(id int64) (*Movie, error) {
return nil, nil
}
// Update : Updating a specific record in the movies table
func (m MovieModel) Update(movie *Movie) error {
return nil
}
// Delete : Deleting a specific record from the movies table
func (m MovieModel) Delete(id int64) error {
return nil
}