align types with new db schema

This commit is contained in:
Hayden 2022-08-30 10:05:11 -08:00
parent 63cfeffc4d
commit b83505104a
30 changed files with 1491 additions and 263 deletions

View file

@ -0,0 +1,29 @@
package repo
import (
"context"
"github.com/google/uuid"
"github.com/hay-kot/content/backend/ent"
)
type EntGroupRepository struct {
db *ent.Client
}
func (r *EntGroupRepository) Create(ctx context.Context, name string) (*ent.Group, error) {
dbGroup, err := r.db.Group.Create().SetName(name).Save(ctx)
if err != nil {
return dbGroup, err
}
return dbGroup, nil
}
func (r *EntGroupRepository) GetOneId(ctx context.Context, id uuid.UUID) (*ent.Group, error) {
dbGroup, err := r.db.Group.Get(ctx, id)
if err != nil {
return dbGroup, err
}
return dbGroup, nil
}

View file

@ -6,7 +6,6 @@ import (
"github.com/hay-kot/content/backend/ent"
"github.com/hay-kot/content/backend/ent/authtokens"
"github.com/hay-kot/content/backend/internal/mapper"
"github.com/hay-kot/content/backend/internal/types"
)
@ -15,7 +14,7 @@ type EntTokenRepository struct {
}
// GetUserFromToken get's a user from a token
func (r *EntTokenRepository) GetUserFromToken(ctx context.Context, token []byte) (types.UserOut, error) {
func (r *EntTokenRepository) GetUserFromToken(ctx context.Context, token []byte) (*ent.User, error) {
dbToken, err := r.db.AuthTokens.Query().
Where(authtokens.Token(token)).
Where(authtokens.ExpiresAtGTE(time.Now())).
@ -23,10 +22,10 @@ func (r *EntTokenRepository) GetUserFromToken(ctx context.Context, token []byte)
Only(ctx)
if err != nil {
return types.UserOut{}, err
return nil, err
}
return mapper.UserOutFromModel(*dbToken.Edges.User), nil
return dbToken.Edges.User, nil
}
// Creates a token for a user

View file

@ -13,66 +13,41 @@ type EntUserRepository struct {
db *ent.Client
}
func (e *EntUserRepository) toUserOut(usr *types.UserOut, entUsr *ent.User) {
usr.ID = entUsr.ID
usr.Password = entUsr.Password
usr.Name = entUsr.Name
usr.Email = entUsr.Email
usr.IsSuperuser = entUsr.IsSuperuser
}
func (e *EntUserRepository) GetOneId(ctx context.Context, id uuid.UUID) (types.UserOut, error) {
func (e *EntUserRepository) GetOneId(ctx context.Context, id uuid.UUID) (*ent.User, error) {
usr, err := e.db.User.Query().Where(user.ID(id)).Only(ctx)
usrOut := types.UserOut{}
if err != nil {
return usrOut, err
return usr, err
}
e.toUserOut(&usrOut, usr)
return usrOut, nil
return usr, nil
}
func (e *EntUserRepository) GetOneEmail(ctx context.Context, email string) (types.UserOut, error) {
func (e *EntUserRepository) GetOneEmail(ctx context.Context, email string) (*ent.User, error) {
usr, err := e.db.User.Query().Where(user.Email(email)).Only(ctx)
usrOut := types.UserOut{}
if err != nil {
return usrOut, err
return usr, err
}
e.toUserOut(&usrOut, usr)
return usrOut, nil
return usr, nil
}
func (e *EntUserRepository) GetAll(ctx context.Context) ([]types.UserOut, error) {
func (e *EntUserRepository) GetAll(ctx context.Context) ([]*ent.User, error) {
users, err := e.db.User.Query().All(ctx)
if err != nil {
return nil, err
}
var usrs []types.UserOut
for _, usr := range users {
usrOut := types.UserOut{}
e.toUserOut(&usrOut, usr)
usrs = append(usrs, usrOut)
}
return usrs, nil
return users, nil
}
func (e *EntUserRepository) Create(ctx context.Context, usr types.UserCreate) (types.UserOut, error) {
func (e *EntUserRepository) Create(ctx context.Context, usr types.UserCreate) (*ent.User, error) {
err := usr.Validate()
usrOut := types.UserOut{}
if err != nil {
return usrOut, err
return &ent.User{}, err
}
entUser, err := e.db.User.
@ -81,11 +56,10 @@ func (e *EntUserRepository) Create(ctx context.Context, usr types.UserCreate) (t
SetEmail(usr.Email).
SetPassword(usr.Password).
SetIsSuperuser(usr.IsSuperuser).
SetGroupID(usr.GroupID).
Save(ctx)
e.toUserOut(&usrOut, entUser)
return usrOut, err
return entUser, err
}
func (e *EntUserRepository) Update(ctx context.Context, ID uuid.UUID, data types.UserUpdate) error {
@ -122,20 +96,12 @@ func (e *EntUserRepository) DeleteAll(ctx context.Context) error {
return err
}
func (e *EntUserRepository) GetSuperusers(ctx context.Context) ([]types.UserOut, error) {
func (e *EntUserRepository) GetSuperusers(ctx context.Context) ([]*ent.User, error) {
users, err := e.db.User.Query().Where(user.IsSuperuser(true)).All(ctx)
if err != nil {
return nil, err
}
var usrs []types.UserOut
for _, usr := range users {
usrOut := types.UserOut{}
e.toUserOut(&usrOut, usr)
usrs = append(usrs, usrOut)
}
return usrs, nil
return users, nil
}

View file

@ -5,6 +5,7 @@ import (
"fmt"
"testing"
"github.com/hay-kot/content/backend/ent"
"github.com/hay-kot/content/backend/internal/types"
"github.com/hay-kot/content/backend/pkgs/faker"
"github.com/stretchr/testify/assert"
@ -66,7 +67,7 @@ func Test_EntUserRepo_GetAll(t *testing.T) {
ctx := context.Background()
created := []types.UserOut{}
created := []*ent.User{}
for _, usr := range toCreate {
usrOut, _ := testRepos.Users.Create(ctx, usr)

View file

@ -4,13 +4,15 @@ import "github.com/hay-kot/content/backend/ent"
// AllRepos is a container for all the repository interfaces
type AllRepos struct {
Users UserRepository
AuthTokens TokenRepository
Users *EntUserRepository
AuthTokens *EntTokenRepository
Groups *EntGroupRepository
}
func EntAllRepos(db *ent.Client) *AllRepos {
return &AllRepos{
Users: &EntUserRepository{db},
AuthTokens: &EntTokenRepository{db},
Groups: &EntGroupRepository{db},
}
}

View file

@ -1,20 +0,0 @@
package repo
import (
"context"
"github.com/hay-kot/content/backend/internal/types"
)
type TokenRepository interface {
// GetUserFromToken get's a user from a token
GetUserFromToken(ctx context.Context, token []byte) (types.UserOut, error)
// Creates a token for a user
CreateToken(ctx context.Context, createToken types.UserAuthTokenCreate) (types.UserAuthToken, error)
// DeleteToken remove a single token from the database - equivalent to revoke or logout
DeleteToken(ctx context.Context, token []byte) error
// PurgeExpiredTokens removes all expired tokens from the database
PurgeExpiredTokens(ctx context.Context) (int, error)
// DeleteAll removes all tokens from the database
DeleteAll(ctx context.Context) (int, error)
}

View file

@ -1,27 +0,0 @@
package repo
import (
"context"
"github.com/google/uuid"
"github.com/hay-kot/content/backend/internal/types"
)
type UserRepository interface {
// GetOneId returns a user by id
GetOneId(ctx context.Context, ID uuid.UUID) (types.UserOut, error)
// GetOneEmail returns a user by email
GetOneEmail(ctx context.Context, email string) (types.UserOut, error)
// GetAll returns all users
GetAll(ctx context.Context) ([]types.UserOut, error)
// Get Super Users
GetSuperusers(ctx context.Context) ([]types.UserOut, error)
// Create creates a new user
Create(ctx context.Context, user types.UserCreate) (types.UserOut, error)
// Update updates a user
Update(ctx context.Context, ID uuid.UUID, user types.UserUpdate) error
// Delete deletes a user
Delete(ctx context.Context, ID uuid.UUID) error
DeleteAll(ctx context.Context) error
}