feat: invite management API: DELETE /v1/user/invite/:id (204, cancels a pending invite) and POST /v1/user/invite/:id/renew (200, new code, expires_at = now+3d, created_at = now, resends the invitation email, old link dead)
This commit is contained in:
1 parent
461e93e3b5
commit
153fd8719a
18 files changed
+1147
-44
No files matched your search
@@ -45,6 +45,25 @@ func (i *InviteRepository) Delete(id uint32) error {
|
||||
return deleteOrNotFound(result, domainInvite.ErrInviteNotFound)
|
||||
}
|
||||
|
||||
func (i *InviteRepository) Renew(id uint32, hashedCode string, expiresAt time.Time, createdAt time.Time) (domainInvite.Invite, error) {
|
||||
result := i.db.Model(&entity.Invite{}).
|
||||
Where("id = ? AND accepted_at IS NULL", id).
|
||||
Updates(map[string]any{
|
||||
"hashed_code": hashedCode,
|
||||
"expires_at": expiresAt,
|
||||
"created_at": createdAt,
|
||||
})
|
||||
if err := deleteOrNotFound(result, domainInvite.ErrInviteNotFound); err != nil {
|
||||
return domainInvite.Invite{}, err
|
||||
}
|
||||
|
||||
var model entity.Invite
|
||||
if err := i.db.First(&model, id).Error; err != nil {
|
||||
return domainInvite.Invite{}, err
|
||||
}
|
||||
return mappers.InviteToDomain(model), nil
|
||||
}
|
||||
|
||||
func (i *InviteRepository) AcceptWithUser(inviteID uint32, acceptedAt time.Time, newUser domainUser.User) (domainUser.User, error) {
|
||||
createdModel := mappers.UserToModel(newUser)
|
||||
err := i.db.Transaction(func(tx *gorm.DB) error {
|
||||
|
||||
Reference in new issue
Block a user