feat(repo): add soft-delete with status filter to file queries

File repository now filters by status=active in all query methods (FindByID, FindByUserID, FindByParentID, FindByNameAndParent).

Delete now performs soft-delete by setting status to 'user_deleted' instead of physical row deletion.

Add ListIncludeDeleted to UserRepository for admin views of all users.

Add tests: StatusFilter, SoftDelete, DeleteIdempotent, StatusFilterCount.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-07-04 17:20:22 +08:00
parent a8078f787c
commit 032f716e49
3 changed files with 156 additions and 18 deletions
+18
View File
@@ -25,6 +25,7 @@ type UserRepository interface {
Update(ctx context.Context, user *model.User) error
Delete(ctx context.Context, id string) error
List(ctx context.Context, offset, limit int) ([]model.User, int64, error)
ListIncludeDeleted(ctx context.Context, offset, limit int) ([]model.User, int64, error)
}
type userRepository struct {
@@ -130,3 +131,20 @@ func (r *userRepository) List(ctx context.Context, offset, limit int) ([]model.U
return users, total, nil
}
// ListIncludeDeleted returns all users (including soft-deleted), paginated.
func (r *userRepository) ListIncludeDeleted(ctx context.Context, offset, limit int) ([]model.User, int64, error) {
var users []model.User
var total int64
if err := r.db.WithContext(ctx).Model(&model.User{}).Count(&total).Error; err != nil {
return nil, 0, err
}
result := r.db.WithContext(ctx).Offset(offset).Limit(limit).Find(&users)
if result.Error != nil {
return nil, 0, result.Error
}
return users, total, nil
}