package main type Movie struct { ID int `json:"id"` Title string `json:"title"` Imdb string `json:"imdb"` Tags []*Tag `json:"tags"` } type Tag struct { ID int `db:"id" json:"id"` Name string `db:"name" json:"name"` } type MovieDB interface { CreateMovie(title string, imdb string) (Movie, error) UpdateMovie(id int, title string, imbd string) error GetMovies(limit ...int) ([]Movie, error) GetMovieById(id int) (Movie, error) GetMoviesByTag(id int) ([]Movie, error) DeleteMovie(id int) error CreateTag(name string) (Tag, error) DeleteTag(id int) error GetTags(limit ...int) ([]Tag, error) GetTagById(id int) (Tag, error) TagMovie(tagId int, movieId int) error UnTagMovie(tagId int, movieId int) error }