feat: shared with me page

This commit is contained in:
juancwu 2026-04-12 16:55:38 +00:00
commit 48cae4957e
5 changed files with 96 additions and 8 deletions

View file

@ -17,6 +17,8 @@ type SpaceRepository interface {
Create(space *model.Space) error
ByID(id string) (*model.Space, error)
ByUserID(userID string) ([]*model.Space, error)
ByOwnerID(userID string) ([]*model.Space, error)
SharedWithUser(userID string) ([]*model.Space, error)
AddMember(spaceID, userID string, role model.Role) error
RemoveMember(spaceID, userID string) error
IsMember(spaceID, userID string) (bool, error)
@ -91,6 +93,37 @@ func (r *spaceRepository) ByUserID(userID string) ([]*model.Space, error) {
return spaces, nil
}
func (r *spaceRepository) ByOwnerID(userID string) ([]*model.Space, error) {
var spaces []*model.Space
query := `
SELECT s.*
FROM spaces s
WHERE s.owner_id = $1
ORDER BY s.created_at DESC;
`
err := r.db.Select(&spaces, query, userID)
if err != nil {
return nil, err
}
return spaces, nil
}
func (r *spaceRepository) SharedWithUser(userID string) ([]*model.Space, error) {
var spaces []*model.Space
query := `
SELECT s.*
FROM spaces s
JOIN space_members sm ON s.id = sm.space_id
WHERE sm.user_id = $1 AND s.owner_id != $1
ORDER BY s.created_at DESC;
`
err := r.db.Select(&spaces, query, userID)
if err != nil {
return nil, err
}
return spaces, nil
}
func (r *spaceRepository) AddMember(spaceID, userID string, role model.Role) error {
query := `INSERT INTO space_members (space_id, user_id, role, joined_at) VALUES ($1, $2, $3, $4);`
_, err := r.db.Exec(query, spaceID, userID, role, time.Now())