repositories now use the new entity package

This commit is contained in:
James Tombleson 2024-05-09 19:08:57 -07:00
parent e9e208371a
commit 80da61db8c
9 changed files with 126 additions and 126 deletions

View File

@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
@ -16,7 +16,7 @@ type AlertDiscordRepo interface {
SoftDelete(ctx context.Context, id int64) (int64, error) SoftDelete(ctx context.Context, id int64) (int64, error)
Restore(ctx context.Context, id int64) (int64, error) Restore(ctx context.Context, id int64) (int64, error)
Delete(ctx context.Context, id int64) (int64, error) Delete(ctx context.Context, id int64) (int64, error)
ListByUser(ctx context.Context, page, limit int, userId int64) ([]domain.AlertDiscordEntity, error) ListByUser(ctx context.Context, page, limit int, userId int64) ([]entity.AlertDiscordEntity, error)
} }
type alertDiscordRepository struct { type alertDiscordRepository struct {
@ -61,7 +61,7 @@ func (r alertDiscordRepository) Delete(ctx context.Context, id int64) (int64, er
return deleteFromTable(ctx, r.conn, "AlertDiscord", id) return deleteFromTable(ctx, r.conn, "AlertDiscord", id)
} }
func (r alertDiscordRepository) ListByUser(ctx context.Context, page, limit int, userId int64) ([]domain.AlertDiscordEntity, error) { func (r alertDiscordRepository) ListByUser(ctx context.Context, page, limit int, userId int64) ([]entity.AlertDiscordEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("AlertDiscord") builder.From("AlertDiscord")
@ -74,19 +74,19 @@ func (r alertDiscordRepository) ListByUser(ctx context.Context, page, limit int,
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.AlertDiscordEntity{}, err return []entity.AlertDiscordEntity{}, err
} }
data := r.processRows(rows) data := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.AlertDiscordEntity{}, errors.New(ErrUserNotFound) return []entity.AlertDiscordEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
func (ur alertDiscordRepository) processRows(rows *sql.Rows) []domain.AlertDiscordEntity { func (ur alertDiscordRepository) processRows(rows *sql.Rows) []entity.AlertDiscordEntity {
items := []domain.AlertDiscordEntity{} items := []entity.AlertDiscordEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -105,7 +105,7 @@ func (ur alertDiscordRepository) processRows(rows *sql.Rows) []domain.AlertDisco
fmt.Println(err) fmt.Println(err)
} }
item := domain.AlertDiscordEntity{ item := entity.AlertDiscordEntity{
ID: id, ID: id,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,

View File

@ -5,7 +5,7 @@ import (
"testing" "testing"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/domain"
"git.jamestombleson.com/jtom38/newsbot-api/internal/repository" "git.jamestombleson.com/jtom38/newsbot-api/internal/repository"
) )

View File

@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
@ -17,14 +17,14 @@ const (
) )
type ArticlesRepo interface { type ArticlesRepo interface {
GetById(ctx context.Context, id int64) (domain.ArticleEntity, error) GetById(ctx context.Context, id int64) (entity.ArticleEntity, error)
GetByUrl(ctx context.Context, url string) (domain.ArticleEntity, error) GetByUrl(ctx context.Context, url string) (entity.ArticleEntity, error)
ListTop(ctx context.Context, limit int) ([]domain.ArticleEntity, error) ListTop(ctx context.Context, limit int) ([]entity.ArticleEntity, error)
ListByPage(ctx context.Context, page, limit int) ([]domain.ArticleEntity, error) ListByPage(ctx context.Context, page, limit int) ([]entity.ArticleEntity, error)
ListByPublishDate(ctx context.Context, page, limit int, orderBy string) ([]domain.ArticleEntity, error) ListByPublishDate(ctx context.Context, page, limit int, orderBy string) ([]entity.ArticleEntity, error)
ListBySource(ctx context.Context, page, limit, sourceId int, orderBy string) ([]domain.ArticleEntity, error) ListBySource(ctx context.Context, page, limit, sourceId int, orderBy string) ([]entity.ArticleEntity, error)
Create(ctx context.Context, sourceId int64, tags, title, url, thumbnailUrl, description, authorName, authorImageUrl string, pubDate time.Time, isVideo bool) (int64, error) Create(ctx context.Context, sourceId int64, tags, title, url, thumbnailUrl, description, authorName, authorImageUrl string, pubDate time.Time, isVideo bool) (int64, error)
CreateFromEntity(ctx context.Context, entity domain.ArticleEntity) (int64, error) CreateFromEntity(ctx context.Context, entity entity.ArticleEntity) (int64, error)
} }
type ArticleRepository struct { type ArticleRepository struct {
@ -41,7 +41,7 @@ func NewArticleRepository(conn *sql.DB) ArticleRepository {
} }
} }
func (ar ArticleRepository) GetById(ctx context.Context, id int64) (domain.ArticleEntity, error) { func (ar ArticleRepository) GetById(ctx context.Context, id int64) (entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles").Where( builder.From("articles").Where(
@ -52,18 +52,18 @@ func (ar ArticleRepository) GetById(ctx context.Context, id int64) (domain.Artic
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.ArticleEntity{}, err return entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.ArticleEntity{}, errors.New(ErrUserNotFound) return entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data[0], nil return data[0], nil
} }
func (ar ArticleRepository) GetByUrl(ctx context.Context, url string) (domain.ArticleEntity, error) { func (ar ArticleRepository) GetByUrl(ctx context.Context, url string) (entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles").Where( builder.From("articles").Where(
@ -74,18 +74,18 @@ func (ar ArticleRepository) GetByUrl(ctx context.Context, url string) (domain.Ar
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.ArticleEntity{}, err return entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.ArticleEntity{}, errors.New(ErrUserNotFound) return entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data[0], nil return data[0], nil
} }
func (ar ArticleRepository) ListTop(ctx context.Context, limit int) ([]domain.ArticleEntity, error) { func (ar ArticleRepository) ListTop(ctx context.Context, limit int) ([]entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles") builder.From("articles")
@ -94,18 +94,18 @@ func (ar ArticleRepository) ListTop(ctx context.Context, limit int) ([]domain.Ar
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.ArticleEntity{}, err return []entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.ArticleEntity{}, errors.New(ErrUserNotFound) return []entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
func (ar ArticleRepository) ListByPage(ctx context.Context, page, limit int) ([]domain.ArticleEntity, error) { func (ar ArticleRepository) ListByPage(ctx context.Context, page, limit int) ([]entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles") builder.From("articles")
@ -116,18 +116,18 @@ func (ar ArticleRepository) ListByPage(ctx context.Context, page, limit int) ([]
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.ArticleEntity{}, err return []entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.ArticleEntity{}, errors.New(ErrUserNotFound) return []entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
func (ar ArticleRepository) ListByPublishDate(ctx context.Context, page, limit int, orderBy string) ([]domain.ArticleEntity, error) { func (ar ArticleRepository) ListByPublishDate(ctx context.Context, page, limit int, orderBy string) ([]entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles") builder.From("articles")
@ -140,17 +140,17 @@ func (ar ArticleRepository) ListByPublishDate(ctx context.Context, page, limit i
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.ArticleEntity{}, err return []entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.ArticleEntity{}, errors.New(ErrUserNotFound) return []entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
func (ar ArticleRepository) ListBySource(ctx context.Context, page, limit, sourceId int, orderBy string) ([]domain.ArticleEntity, error) { func (ar ArticleRepository) ListBySource(ctx context.Context, page, limit, sourceId int, orderBy string) ([]entity.ArticleEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("articles") builder.From("articles")
@ -167,12 +167,12 @@ func (ar ArticleRepository) ListBySource(ctx context.Context, page, limit, sourc
query, args := builder.Build() query, args := builder.Build()
rows, err := ar.conn.QueryContext(ctx, query, args...) rows, err := ar.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.ArticleEntity{}, err return []entity.ArticleEntity{}, err
} }
data := ar.processRows(rows) data := ar.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.ArticleEntity{}, errors.New(ErrUserNotFound) return []entity.ArticleEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
@ -193,12 +193,12 @@ func (ar ArticleRepository) Create(ctx context.Context, sourceId int64, tags, ti
return 1, nil return 1, nil
} }
func (ar ArticleRepository) CreateFromEntity(ctx context.Context, entity domain.ArticleEntity) (int64, error) { func (ar ArticleRepository) CreateFromEntity(ctx context.Context, entity entity.ArticleEntity) (int64, error) {
dt := time.Now() dt := time.Now()
queryBuilder := sqlbuilder.NewInsertBuilder() queryBuilder := sqlbuilder.NewInsertBuilder()
queryBuilder.InsertInto("articles") queryBuilder.InsertInto("articles")
queryBuilder.Cols("UpdatedAt", "CreatedAt", "DeletedAt", "SourceId", "Tags", "Title", "Url", "PubDate", "IsVideo", "ThumbnailUrl", "Description", "AuthorName", "AuthorImageUrl") queryBuilder.Cols("UpdatedAt", "CreatedAt", "DeletedAt", "SourceId", "Tags", "Title", "Url", "PubDate", "IsVideo", "ThumbnailUrl", "Description", "AuthorName", "AuthorImageUrl")
queryBuilder.Values(dt, dt, timeZero, entity.SourceID, entity.Tags, entity.Title, entity.Url, entity.PubDate, entity.IsVideo, entity.Thumbnail, entity.Description, entity.AuthorName, entity.AuthorImageUrl) queryBuilder.Values(dt, dt, timeZero, entity.SourceID, entity.Tags, entity.Title, entity.Url, entity.PubDate, entity.IsVideo, entity.Thumbnail, entity.Description, entity.AuthorName, entity.AuthorImageUrl)
query, args := queryBuilder.Build() query, args := queryBuilder.Build()
_, err := ar.conn.ExecContext(ctx, query, args...) _, err := ar.conn.ExecContext(ctx, query, args...)
@ -209,8 +209,8 @@ func (ar ArticleRepository) CreateFromEntity(ctx context.Context, entity domain.
return 1, nil return 1, nil
} }
func (ur ArticleRepository) processRows(rows *sql.Rows) []domain.ArticleEntity { func (ur ArticleRepository) processRows(rows *sql.Rows) []entity.ArticleEntity {
items := []domain.ArticleEntity{} items := []entity.ArticleEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -237,7 +237,7 @@ func (ur ArticleRepository) processRows(rows *sql.Rows) []domain.ArticleEntity {
fmt.Println(err) fmt.Println(err)
} }
item := domain.ArticleEntity{ item := entity.ArticleEntity{
ID: id, ID: id,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,

View File

@ -5,7 +5,7 @@ import (
"database/sql" "database/sql"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
@ -16,10 +16,10 @@ type DiscordWebHookRepo interface {
SoftDelete(ctx context.Context, id int64) (int64, error) SoftDelete(ctx context.Context, id int64) (int64, error)
Restore(ctx context.Context, id int64) (int64, error) Restore(ctx context.Context, id int64) (int64, error)
Delete(ctx context.Context, id int64) (int64, error) Delete(ctx context.Context, id int64) (int64, error)
GetById(ctx context.Context, id int64) (domain.DiscordWebHookEntity, error) GetById(ctx context.Context, id int64) (entity.DiscordWebHookEntity, error)
GetByUrl(ctx context.Context, url string) (domain.DiscordWebHookEntity, error) GetByUrl(ctx context.Context, url string) (entity.DiscordWebHookEntity, error)
ListByServerName(ctx context.Context, name string) ([]domain.DiscordWebHookEntity, error) ListByServerName(ctx context.Context, name string) ([]entity.DiscordWebHookEntity, error)
ListByServerAndChannel(ctx context.Context, server, channel string) ([]domain.DiscordWebHookEntity, error) ListByServerAndChannel(ctx context.Context, server, channel string) ([]entity.DiscordWebHookEntity, error)
} }
type discordWebHookRepository struct { type discordWebHookRepository struct {
@ -100,7 +100,7 @@ func (r discordWebHookRepository) Delete(ctx context.Context, id int64) (int64,
return deleteFromTable(ctx, r.conn, "DiscordWebHooks", id) return deleteFromTable(ctx, r.conn, "DiscordWebHooks", id)
} }
func (r discordWebHookRepository) GetById(ctx context.Context, id int64) (domain.DiscordWebHookEntity, error) { func (r discordWebHookRepository) GetById(ctx context.Context, id int64) (entity.DiscordWebHookEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("DiscordWebHooks").Where( builder.From("DiscordWebHooks").Where(
@ -111,18 +111,18 @@ func (r discordWebHookRepository) GetById(ctx context.Context, id int64) (domain
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.DiscordWebHookEntity{}, err return entity.DiscordWebHookEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.DiscordWebHookEntity{}, err return entity.DiscordWebHookEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r discordWebHookRepository) GetByUrl(ctx context.Context, url string) (domain.DiscordWebHookEntity, error) { func (r discordWebHookRepository) GetByUrl(ctx context.Context, url string) (entity.DiscordWebHookEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("DiscordWebHooks").Where( builder.From("DiscordWebHooks").Where(
@ -133,18 +133,18 @@ func (r discordWebHookRepository) GetByUrl(ctx context.Context, url string) (dom
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.DiscordWebHookEntity{}, err return entity.DiscordWebHookEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.DiscordWebHookEntity{}, err return entity.DiscordWebHookEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r discordWebHookRepository) ListByServerName(ctx context.Context, name string) ([]domain.DiscordWebHookEntity, error) { func (r discordWebHookRepository) ListByServerName(ctx context.Context, name string) ([]entity.DiscordWebHookEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("DiscordWebHooks").Where( builder.From("DiscordWebHooks").Where(
@ -154,18 +154,18 @@ func (r discordWebHookRepository) ListByServerName(ctx context.Context, name str
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.DiscordWebHookEntity{}, err return []entity.DiscordWebHookEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.DiscordWebHookEntity{}, err return []entity.DiscordWebHookEntity{}, err
} }
return data, nil return data, nil
} }
func (r discordWebHookRepository) ListByServerAndChannel(ctx context.Context, server, channel string) ([]domain.DiscordWebHookEntity, error) { func (r discordWebHookRepository) ListByServerAndChannel(ctx context.Context, server, channel string) ([]entity.DiscordWebHookEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("DiscordWebHooks").Where( builder.From("DiscordWebHooks").Where(
@ -176,19 +176,19 @@ func (r discordWebHookRepository) ListByServerAndChannel(ctx context.Context, se
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.DiscordWebHookEntity{}, err return []entity.DiscordWebHookEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.DiscordWebHookEntity{}, err return []entity.DiscordWebHookEntity{}, err
} }
return data, nil return data, nil
} }
func (r discordWebHookRepository) processRows(rows *sql.Rows) ([]domain.DiscordWebHookEntity, error) { func (r discordWebHookRepository) processRows(rows *sql.Rows) ([]entity.DiscordWebHookEntity, error) {
items := []domain.DiscordWebHookEntity{} items := []entity.DiscordWebHookEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -209,7 +209,7 @@ func (r discordWebHookRepository) processRows(rows *sql.Rows) ([]domain.DiscordW
return items, err return items, err
} }
item := domain.DiscordWebHookEntity{ item := entity.DiscordWebHookEntity{
ID: id, ID: id,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,

View File

@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
@ -17,7 +17,7 @@ const (
type RefreshToken interface { type RefreshToken interface {
Create(ctx context.Context, username string, token string) (int64, error) Create(ctx context.Context, username string, token string) (int64, error)
GetByUsername(ctx context.Context, name string) (domain.RefreshTokenEntity, error) GetByUsername(ctx context.Context, name string) (entity.RefreshTokenEntity, error)
DeleteById(ctx context.Context, id int64) (int64, error) DeleteById(ctx context.Context, id int64) (int64, error)
} }
@ -47,7 +47,7 @@ func (rt RefreshTokenRepository) Create(ctx context.Context, username string, to
return 1, nil return 1, nil
} }
func (rt RefreshTokenRepository) GetByUsername(ctx context.Context, name string) (domain.RefreshTokenEntity, error) { func (rt RefreshTokenRepository) GetByUsername(ctx context.Context, name string) (entity.RefreshTokenEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*").From(refreshTokenTableName).Where( builder.Select("*").From(refreshTokenTableName).Where(
builder.E("Username", name), builder.E("Username", name),
@ -56,12 +56,12 @@ func (rt RefreshTokenRepository) GetByUsername(ctx context.Context, name string)
query, args := builder.Build() query, args := builder.Build()
rows, err := rt.connection.QueryContext(ctx, query, args...) rows, err := rt.connection.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.RefreshTokenEntity{}, err return entity.RefreshTokenEntity{}, err
} }
data := rt.processRows(rows) data := rt.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.RefreshTokenEntity{}, errors.New("no token found for user") return entity.RefreshTokenEntity{}, errors.New("no token found for user")
} }
return data[0], nil return data[0], nil
@ -83,8 +83,8 @@ func (rt RefreshTokenRepository) DeleteById(ctx context.Context, id int64) (int6
return rows.RowsAffected() return rows.RowsAffected()
} }
func (rd RefreshTokenRepository) processRows(rows *sql.Rows) []domain.RefreshTokenEntity { func (rd RefreshTokenRepository) processRows(rows *sql.Rows) []entity.RefreshTokenEntity {
items := []domain.RefreshTokenEntity{} items := []entity.RefreshTokenEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -99,15 +99,15 @@ func (rd RefreshTokenRepository) processRows(rows *sql.Rows) []domain.RefreshTok
fmt.Println(err) fmt.Println(err)
} }
item := domain.RefreshTokenEntity{ item := entity.RefreshTokenEntity{
ID: id, ID: id,
Username: username, Username: username,
Token: token, Token: token,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,
} }
if (deletedAt.Valid) { if deletedAt.Valid {
item.DeletedAt = deletedAt.Time item.DeletedAt = deletedAt.Time
} }

View File

@ -5,18 +5,18 @@ import (
"database/sql" "database/sql"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
type Sources interface { type Sources interface {
Create(ctx context.Context, source, displayName, url, tags string, enabled bool) (int64, error) Create(ctx context.Context, source, displayName, url, tags string, enabled bool) (int64, error)
GetById(ctx context.Context, id int64) (domain.SourceEntity, error) GetById(ctx context.Context, id int64) (entity.SourceEntity, error)
GetByDisplayName(ctx context.Context, displayName string) (domain.SourceEntity, error) GetByDisplayName(ctx context.Context, displayName string) (entity.SourceEntity, error)
GetBySource(ctx context.Context, source string) (domain.SourceEntity, error) GetBySource(ctx context.Context, source string) (entity.SourceEntity, error)
GetBySourceAndName(ctx context.Context, source, name string) (domain.SourceEntity, error) GetBySourceAndName(ctx context.Context, source, name string) (entity.SourceEntity, error)
List(ctx context.Context, page, limit int) ([]domain.SourceEntity, error) List(ctx context.Context, page, limit int) ([]entity.SourceEntity, error)
ListBySource(ctx context.Context, page, limit int, source string) ([]domain.SourceEntity, error) ListBySource(ctx context.Context, page, limit int, source string) ([]entity.SourceEntity, error)
Enable(ctx context.Context, id int64) (int64, error) Enable(ctx context.Context, id int64) (int64, error)
Disable(ctx context.Context, id int64) (int64, error) Disable(ctx context.Context, id int64) (int64, error)
SoftDelete(ctx context.Context, id int64) (int64, error) SoftDelete(ctx context.Context, id int64) (int64, error)
@ -50,7 +50,7 @@ func (r sourceRepository) Create(ctx context.Context, source, displayName, url,
return 1, nil return 1, nil
} }
func (r sourceRepository) GetById(ctx context.Context, id int64) (domain.SourceEntity, error) { func (r sourceRepository) GetById(ctx context.Context, id int64) (entity.SourceEntity, error) {
b := sqlbuilder.NewSelectBuilder() b := sqlbuilder.NewSelectBuilder()
b.Select("*") b.Select("*")
b.From("Sources").Where( b.From("Sources").Where(
@ -61,18 +61,18 @@ func (r sourceRepository) GetById(ctx context.Context, id int64) (domain.SourceE
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r sourceRepository) GetByDisplayName(ctx context.Context, displayName string) (domain.SourceEntity, error) { func (r sourceRepository) GetByDisplayName(ctx context.Context, displayName string) (entity.SourceEntity, error) {
b := sqlbuilder.NewSelectBuilder() b := sqlbuilder.NewSelectBuilder()
b.Select("*") b.Select("*")
b.From("Sources").Where( b.From("Sources").Where(
@ -83,18 +83,18 @@ func (r sourceRepository) GetByDisplayName(ctx context.Context, displayName stri
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r sourceRepository) GetBySource(ctx context.Context, source string) (domain.SourceEntity, error) { func (r sourceRepository) GetBySource(ctx context.Context, source string) (entity.SourceEntity, error) {
b := sqlbuilder.NewSelectBuilder() b := sqlbuilder.NewSelectBuilder()
b.Select("*") b.Select("*")
b.From("Sources").Where( b.From("Sources").Where(
@ -105,18 +105,18 @@ func (r sourceRepository) GetBySource(ctx context.Context, source string) (domai
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r sourceRepository) GetBySourceAndName(ctx context.Context, source, name string) (domain.SourceEntity, error) { func (r sourceRepository) GetBySourceAndName(ctx context.Context, source, name string) (entity.SourceEntity, error) {
b := sqlbuilder.NewSelectBuilder() b := sqlbuilder.NewSelectBuilder()
b.Select("*") b.Select("*")
b.From("Sources").Where( b.From("Sources").Where(
@ -128,18 +128,18 @@ func (r sourceRepository) GetBySourceAndName(ctx context.Context, source, name s
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.SourceEntity{}, err return entity.SourceEntity{}, err
} }
return data[0], nil return data[0], nil
} }
func (r sourceRepository) List(ctx context.Context, page, limit int) ([]domain.SourceEntity, error) { func (r sourceRepository) List(ctx context.Context, page, limit int) ([]entity.SourceEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("Sources") builder.From("Sources")
@ -149,18 +149,18 @@ func (r sourceRepository) List(ctx context.Context, page, limit int) ([]domain.S
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.SourceEntity{}, err return []entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.SourceEntity{}, err return []entity.SourceEntity{}, err
} }
return data, nil return data, nil
} }
func (r sourceRepository) ListBySource(ctx context.Context, page, limit int, source string) ([]domain.SourceEntity, error) { func (r sourceRepository) ListBySource(ctx context.Context, page, limit int, source string) ([]entity.SourceEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("Sources") builder.From("Sources")
@ -173,12 +173,12 @@ func (r sourceRepository) ListBySource(ctx context.Context, page, limit int, sou
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.SourceEntity{}, err return []entity.SourceEntity{}, err
} }
data, err := r.processRows(rows) data, err := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.SourceEntity{}, err return []entity.SourceEntity{}, err
} }
return data, nil return data, nil
@ -236,8 +236,8 @@ func (r sourceRepository) Delete(ctx context.Context, id int64) (int64, error) {
return deleteFromTable(ctx, r.conn, "Sources", id) return deleteFromTable(ctx, r.conn, "Sources", id)
} }
func (r sourceRepository) processRows(rows *sql.Rows) ([]domain.SourceEntity, error) { func (r sourceRepository) processRows(rows *sql.Rows) ([]entity.SourceEntity, error) {
items := []domain.SourceEntity{} items := []entity.SourceEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -258,7 +258,7 @@ func (r sourceRepository) processRows(rows *sql.Rows) ([]domain.SourceEntity, er
return items, err return items, err
} }
item := domain.SourceEntity{ item := entity.SourceEntity{
ID: id, ID: id,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,

View File

@ -4,7 +4,7 @@ import (
"context" "context"
"testing" "testing"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/domain"
"git.jamestombleson.com/jtom38/newsbot-api/internal/repository" "git.jamestombleson.com/jtom38/newsbot-api/internal/repository"
) )

View File

@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
) )
@ -16,7 +16,7 @@ type UserSourceRepo interface {
SoftDelete(ctx context.Context, id int64) (int64, error) SoftDelete(ctx context.Context, id int64) (int64, error)
Restore(ctx context.Context, id int64) (int64, error) Restore(ctx context.Context, id int64) (int64, error)
Delete(ctx context.Context, id int64) (int64, error) Delete(ctx context.Context, id int64) (int64, error)
ListByUser(ctx context.Context, page, limit int, userId int64) ([]domain.UserSourceSubscriptionEntity, error) ListByUser(ctx context.Context, page, limit int, userId int64) ([]entity.UserSourceSubscriptionEntity, error)
} }
type userSourceRepository struct { type userSourceRepository struct {
@ -61,7 +61,7 @@ func (r userSourceRepository) Delete(ctx context.Context, id int64) (int64, erro
return deleteFromTable(ctx, r.conn, "UserSourceSubscriptions", id) return deleteFromTable(ctx, r.conn, "UserSourceSubscriptions", id)
} }
func (r userSourceRepository) ListByUser(ctx context.Context, page, limit int, userId int64) ([]domain.UserSourceSubscriptionEntity, error) { func (r userSourceRepository) ListByUser(ctx context.Context, page, limit int, userId int64) ([]entity.UserSourceSubscriptionEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*") builder.Select("*")
builder.From("UserSourceSubscriptions") builder.From("UserSourceSubscriptions")
@ -74,19 +74,19 @@ func (r userSourceRepository) ListByUser(ctx context.Context, page, limit int, u
query, args := builder.Build() query, args := builder.Build()
rows, err := r.conn.QueryContext(ctx, query, args...) rows, err := r.conn.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return []domain.UserSourceSubscriptionEntity{}, err return []entity.UserSourceSubscriptionEntity{}, err
} }
data := r.processRows(rows) data := r.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return []domain.UserSourceSubscriptionEntity{}, errors.New(ErrUserNotFound) return []entity.UserSourceSubscriptionEntity{}, errors.New(ErrUserNotFound)
} }
return data, nil return data, nil
} }
func (ur userSourceRepository) processRows(rows *sql.Rows) []domain.UserSourceSubscriptionEntity { func (ur userSourceRepository) processRows(rows *sql.Rows) []entity.UserSourceSubscriptionEntity {
items := []domain.UserSourceSubscriptionEntity{} items := []entity.UserSourceSubscriptionEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -104,13 +104,13 @@ func (ur userSourceRepository) processRows(rows *sql.Rows) []domain.UserSourceSu
fmt.Println(err) fmt.Println(err)
} }
item := domain.UserSourceSubscriptionEntity{ item := entity.UserSourceSubscriptionEntity{
ID: id, ID: id,
CreatedAt: createdAt, CreatedAt: createdAt,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,
DeletedAt: deletedAt, DeletedAt: deletedAt,
UserID: userId, UserID: userId,
SourceID: sourceId, SourceID: sourceId,
} }
items = append(items, item) items = append(items, item)

View File

@ -7,7 +7,7 @@ import (
"fmt" "fmt"
"time" "time"
"git.jamestombleson.com/jtom38/newsbot-api/internal/domain" "git.jamestombleson.com/jtom38/newsbot-api/internal/entity"
"github.com/huandu/go-sqlbuilder" "github.com/huandu/go-sqlbuilder"
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
@ -19,9 +19,9 @@ const (
) )
type Users interface { type Users interface {
GetByName(ctx context.Context, name string) (domain.UserEntity, error) GetByName(ctx context.Context, name string) (entity.UserEntity, error)
Create(ctx context.Context, name, password, scope string) (int64, error) Create(ctx context.Context, name, password, scope string) (int64, error)
Update(ctx context.Context, id int, entity domain.UserEntity) error Update(ctx context.Context, id int, entity entity.UserEntity) error
UpdatePassword(ctx context.Context, name, password string) error UpdatePassword(ctx context.Context, name, password string) error
CheckUserHash(ctx context.Context, name, password string) error CheckUserHash(ctx context.Context, name, password string) error
UpdateScopes(ctx context.Context, name, scope string) error UpdateScopes(ctx context.Context, name, scope string) error
@ -38,7 +38,7 @@ type userRepository struct {
connection *sql.DB connection *sql.DB
} }
func (ur userRepository) GetByName(ctx context.Context, name string) (domain.UserEntity, error) { func (ur userRepository) GetByName(ctx context.Context, name string) (entity.UserEntity, error) {
builder := sqlbuilder.NewSelectBuilder() builder := sqlbuilder.NewSelectBuilder()
builder.Select("*").From("users").Where( builder.Select("*").From("users").Where(
builder.E("Name", name), builder.E("Name", name),
@ -47,18 +47,18 @@ func (ur userRepository) GetByName(ctx context.Context, name string) (domain.Use
rows, err := ur.connection.QueryContext(ctx, query, args...) rows, err := ur.connection.QueryContext(ctx, query, args...)
if err != nil { if err != nil {
return domain.UserEntity{}, err return entity.UserEntity{}, err
} }
data := ur.processRows(rows) data := ur.processRows(rows)
if len(data) == 0 { if len(data) == 0 {
return domain.UserEntity{}, errors.New(ErrUserNotFound) return entity.UserEntity{}, errors.New(ErrUserNotFound)
} }
return data[0], nil return data[0], nil
} }
func (ur userRepository) Create(ctx context.Context,name, password, scope string) (int64, error) { func (ur userRepository) Create(ctx context.Context, name, password, scope string) (int64, error) {
passwordBytes := []byte(password) passwordBytes := []byte(password)
hash, err := bcrypt.GenerateFromPassword(passwordBytes, bcrypt.DefaultCost) hash, err := bcrypt.GenerateFromPassword(passwordBytes, bcrypt.DefaultCost)
if err != nil { if err != nil {
@ -80,7 +80,7 @@ func (ur userRepository) Create(ctx context.Context,name, password, scope string
return 1, nil return 1, nil
} }
func (ur userRepository) Update(ctx context.Context, id int, entity domain.UserEntity) error { func (ur userRepository) Update(ctx context.Context, id int, entity entity.UserEntity) error {
return errors.New("not implemented") return errors.New("not implemented")
} }
@ -98,7 +98,7 @@ func (ur userRepository) UpdatePassword(ctx context.Context, name, password stri
// If the hash matches what we have in the database, an error will not be returned. // If the hash matches what we have in the database, an error will not be returned.
// If the user does not exist or the hash does not match, an error will be returned // If the user does not exist or the hash does not match, an error will be returned
func (ur userRepository) CheckUserHash(ctx context.Context,name, password string) error { func (ur userRepository) CheckUserHash(ctx context.Context, name, password string) error {
record, err := ur.GetByName(ctx, name) record, err := ur.GetByName(ctx, name)
if err != nil { if err != nil {
return err return err
@ -112,7 +112,7 @@ func (ur userRepository) CheckUserHash(ctx context.Context,name, password string
return nil return nil
} }
func (ur userRepository) UpdateScopes(ctx context.Context,name, scope string) error { func (ur userRepository) UpdateScopes(ctx context.Context, name, scope string) error {
builder := sqlbuilder.NewUpdateBuilder() builder := sqlbuilder.NewUpdateBuilder()
builder.Update("users") builder.Update("users")
builder.Set( builder.Set(
@ -130,8 +130,8 @@ func (ur userRepository) UpdateScopes(ctx context.Context,name, scope string) er
return nil return nil
} }
func (ur userRepository) processRows(rows *sql.Rows) []domain.UserEntity { func (ur userRepository) processRows(rows *sql.Rows) []entity.UserEntity {
items := []domain.UserEntity{} items := []entity.UserEntity{}
for rows.Next() { for rows.Next() {
var id int64 var id int64
@ -146,7 +146,7 @@ func (ur userRepository) processRows(rows *sql.Rows) []domain.UserEntity {
fmt.Println(err) fmt.Println(err)
} }
item := domain.UserEntity{ item := entity.UserEntity{
ID: id, ID: id,
UpdatedAt: updatedAt, UpdatedAt: updatedAt,
Username: username, Username: username,