Skip to content

Commit

Permalink
Merge pull request #83 from fabiante/feat/user-table
Browse files Browse the repository at this point in the history
  • Loading branch information
fabiante authored Sep 23, 2023
2 parents 83e19ed + 90f5e1f commit a3a3e39
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 5 deletions.
5 changes: 3 additions & 2 deletions api/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,11 @@ import (
type Server struct {
resolver app.ResolveServiceInterface
admin app.AdminServiceInterface
user app.UserServiceInterface
}

func NewServer(resolver app.ResolveServiceInterface, admin app.AdminServiceInterface) *Server {
return &Server{resolver: resolver, admin: admin}
func NewServer(resolver app.ResolveServiceInterface, admin app.AdminServiceInterface, user app.UserServiceInterface) *Server {
return &Server{resolver: resolver, admin: admin, user: user}
}

func (s *Server) Resolve(ctx *gin.Context) {
Expand Down
9 changes: 9 additions & 0 deletions app/models/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package models

import "gorm.io/gorm"

type User struct {
gorm.Model

Email string
}
5 changes: 5 additions & 0 deletions app/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,8 @@ type AdminServiceInterface interface {
// ErrNotFound is returned if the domain does not exist.
GetDomain(name string) (*models.Domain, error)
}

type UserServiceInterface interface {
CreateUser(email string) error
GetUser(email string) (*models.User, error)
}
40 changes: 40 additions & 0 deletions app/service_user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package app

import (
"github.com/fabiante/persurl/app/models"
"gorm.io/gorm"
)

type UserService struct {
db *gorm.DB
}

func NewUserService(db *gorm.DB) *UserService {
return &UserService{db: db}
}

func (s *UserService) CreateUser(email string) error {
user := &models.User{
Email: email,
}

err := s.db.Create(user).Error
switch {
case err != nil:
return mapDBError(err)
default:
return nil
}
}

func (s *UserService) GetUser(email string) (*models.User, error) {
user := &models.User{}

err := s.db.Take(user, "email = ?", email).Error
switch {
case err != nil:
return nil, mapDBError(err)
default:
return user, nil
}
}
3 changes: 2 additions & 1 deletion cli/cmds/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ func init() {

engine := gin.Default()
service := app.NewService(database.Gorm)
server := api.NewServer(service, service)
userService := app.NewUserService(database.Gorm)
server := api.NewServer(service, service, userService)
api.SetupRouting(engine, server)
if err := engine.Run(":8060"); err != nil {
log.Fatalf("running api failed: %s", err)
Expand Down
13 changes: 13 additions & 0 deletions db/migrations/migrate.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,19 @@ var migrationsPostgres = []any{
target varchar(4096) not null,
constraint purls_pk2
unique (domain_id, name)
)`,
),
newMigration("2023-09-22-00000030-CreateTableUsers", `create table users
(
id serial
constraint user_pk
primary key,
created_at timestamp not null,
updated_at timestamp,
deleted_at timestamp,
email varchar(256) not null,
constraint purls_email
unique (email)
)`,
),
}
3 changes: 2 additions & 1 deletion tests/http_load_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ func TestLoadWithHTTPDriver(t *testing.T) {
require.NoError(t, err, "truncating tables failed")

service := app.NewService(database.Gorm)
server := api.NewServer(service, service)
userService := app.NewUserService(database.Gorm)
server := api.NewServer(service, service, userService)
api.SetupRouting(handler, server)

testServer := httptest.NewServer(handler)
Expand Down
3 changes: 2 additions & 1 deletion tests/http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ func TestWithHTTPDriver(t *testing.T) {
require.NoError(t, err, "truncating tables failed")

service := app.NewService(database.Gorm)
server := api.NewServer(service, service)
userService := app.NewUserService(database.Gorm)
server := api.NewServer(service, service, userService)
api.SetupRouting(handler, server)

testServer := httptest.NewServer(handler)
Expand Down

0 comments on commit a3a3e39

Please sign in to comment.