[server][core] move GetSharedResources to users package

This commit is contained in:
Abhishek Shroff
2024-10-21 23:29:47 +05:30
parent 25f83eff01
commit e481caa4ff
7 changed files with 126 additions and 103 deletions
+1 -1
View File
@@ -41,7 +41,7 @@ func handleMyHomeRoute(c *gin.Context) {
func createMySharedRouteHandler(a *app.App) func(*gin.Context) {
return func(c *gin.Context) {
user := auth.GetUser(c)
shared, err := a.GetSharedResources(c.Request.Context(), user)
shared, err := a.OpenUserManager(c.Request.Context()).GetSharedResources(user)
if err != nil {
panic(err)
}
+1 -1
View File
@@ -57,7 +57,7 @@ func setupUserListCommand() *cobra.Command {
Use: "list",
Short: "List Users",
Run: func(cmd *cobra.Command, args []string) {
users, err := common.App().OpenUserManager(context.Background()).ListUsers()
users, err := common.App().OpenUserManager(context.Background()).AllUsers()
if err != nil {
logrus.Fatal(err)
}
-34
View File
@@ -3,7 +3,6 @@ package app
import (
"context"
"errors"
"time"
"github.com/google/uuid"
"github.com/shroff/phylum/server/internal/core/db"
@@ -124,36 +123,3 @@ func (a App) OpenFileSystem(ctx context.Context, u user.User) fs.FileSystem {
func (a App) OpenUserManager(ctx context.Context) user.Manager {
return user.CreateManager(ctx, a.db)
}
func (a App) GetSharedResources(ctx context.Context, u user.User) (result []fs.Resource, err error) {
res, err := a.db.Queries.SharedResources(ctx, db.SharedResourcesParams{Username: u.Username, UserHome: u.Home})
if err != nil {
return
}
result = make([]fs.Resource, len(res))
for i, r := range res {
var deleted *time.Time
if r.Deleted.Valid {
deleted = &r.Deleted.Time
}
result[i] = fs.Resource{
ID: r.ID,
ParentID: r.Parent,
Name: r.Name,
Dir: r.Dir,
Created: r.Created.Time,
Modified: r.Modified.Time,
Deleted: deleted,
ContentSize: r.ContentSize,
ContentType: r.ContentType,
ContentSHA256: r.ContentSha256,
Permissions: string(r.Permissions),
// Not Needed
// Path: "",
// UserPermissions: 0,
// InheritedPermissions: "",
}
}
return
}
-66
View File
@@ -2,46 +2,15 @@ package user
import (
"context"
"net/http"
"github.com/google/uuid"
"github.com/jackc/pgx/v5"
"github.com/shroff/phylum/server/internal/core/db"
"github.com/shroff/phylum/server/internal/core/errors"
)
type Manager interface {
WithDb(db *db.DbHandler) Manager
// create.go
CreateUser(username, displayName, password string, root uuid.UUID) (User, error)
ListUsers() ([]User, error)
UserByEmail(email string) (User, error)
// update.go
UpdateUserRoot(user User, root uuid.UUID) error
UpdateUserHome(user User, home uuid.UUID) error
UpdateUserDisplayName(user User, displayName string) error
// auth.go
VerifyUserPassword(email, password string) (User, error)
CreateAccessToken(username string) (string, error)
ReadAccessToken(accessToken string) (User, error)
}
type manager struct {
db *db.DbHandler
ctx context.Context
}
func CreateManager(ctx context.Context, db *db.DbHandler) Manager {
return &manager{
ctx: ctx,
db: db,
}
}
func (m manager) WithDb(db *db.DbHandler) Manager {
return m.withDb(db)
}
@@ -52,38 +21,3 @@ func (m manager) withDb(db *db.DbHandler) manager {
db: db,
}
}
var ErrNotFound = errors.NewError(http.StatusNotFound, "user_not_found", "no such user")
func (m manager) ListUsers() ([]User, error) {
results, err := m.db.ListUsers(m.ctx)
if err != nil {
return nil, err
}
users := make([]User, len(results))
for i, r := range results {
users[i] = User{
Username: r.Username,
DisplayName: r.DisplayName,
Root: r.Root,
Home: r.Home,
}
}
return users, nil
}
func (m manager) UserByEmail(email string) (User, error) {
result, err := m.db.UserByUsername(m.ctx, email)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
err = ErrNotFound
}
return User{}, err
}
return User{
Username: result.Username,
DisplayName: result.DisplayName,
Root: result.Root,
Home: result.Home,
}, nil
}
+43
View File
@@ -0,0 +1,43 @@
package user
import (
"net/http"
"github.com/jackc/pgx/v5"
"github.com/shroff/phylum/server/internal/core/errors"
)
var ErrNotFound = errors.NewError(http.StatusNotFound, "user_not_found", "no such user")
func (m manager) AllUsers() ([]User, error) {
results, err := m.db.ListUsers(m.ctx)
if err != nil {
return nil, err
}
users := make([]User, len(results))
for i, r := range results {
users[i] = User{
Username: r.Username,
DisplayName: r.DisplayName,
Root: r.Root,
Home: r.Home,
}
}
return users, nil
}
func (m manager) UserByEmail(email string) (User, error) {
result, err := m.db.UserByUsername(m.ctx, email)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {
err = ErrNotFound
}
return User{}, err
}
return User{
Username: result.Username,
DisplayName: result.DisplayName,
Root: result.Root,
Home: result.Home,
}, nil
}
+39 -1
View File
@@ -1,6 +1,12 @@
package user
import "github.com/google/uuid"
import (
"context"
"github.com/google/uuid"
"github.com/shroff/phylum/server/internal/core/db"
"github.com/shroff/phylum/server/internal/core/fs"
)
type User struct {
Username string `json:"username"`
@@ -8,3 +14,35 @@ type User struct {
Root uuid.UUID `json:"root"`
Home uuid.UUID `json:"home"`
}
type Manager interface {
// manager.go
WithDb(db *db.DbHandler) Manager
// create.go
CreateUser(username, displayName, password string, root uuid.UUID) (User, error)
// select.go
AllUsers() ([]User, error)
UserByEmail(email string) (User, error)
// update.go
UpdateUserRoot(user User, root uuid.UUID) error
UpdateUserHome(user User, home uuid.UUID) error
UpdateUserDisplayName(user User, displayName string) error
// auth.go
VerifyUserPassword(email, password string) (User, error)
CreateAccessToken(username string) (string, error)
ReadAccessToken(accessToken string) (User, error)
// user_lists.go
GetSharedResources(u User) (result []fs.Resource, err error)
}
func CreateManager(ctx context.Context, db *db.DbHandler) Manager {
return &manager{
ctx: ctx,
db: db,
}
}
+42
View File
@@ -0,0 +1,42 @@
package user
import (
"time"
"github.com/shroff/phylum/server/internal/core/db"
"github.com/shroff/phylum/server/internal/core/fs"
)
func (m manager) GetSharedResources(u User) (result []fs.Resource, err error) {
// TODO: This doesn't take permissions into account. is this okay?
res, err := m.db.Queries.SharedResources(m.ctx, db.SharedResourcesParams{Username: u.Username, UserHome: u.Home})
if err != nil {
return
}
result = make([]fs.Resource, len(res))
for i, r := range res {
var deleted *time.Time
if r.Deleted.Valid {
deleted = &r.Deleted.Time
}
result[i] = fs.Resource{
ID: r.ID,
ParentID: r.Parent,
Name: r.Name,
Dir: r.Dir,
Created: r.Created.Time,
Modified: r.Modified.Time,
Deleted: deleted,
ContentSize: r.ContentSize,
ContentType: r.ContentType,
ContentSHA256: r.ContentSha256,
Permissions: string(r.Permissions),
// Not Needed
// Path: "",
// UserPermissions: 0,
// InheritedPermissions: "",
}
}
return
}