feat: activity log backend foundation

This commit is contained in:
fsylvain committed 2026-10-06 20:35:03 +02:00
1 parent 8907bb49fe
commit 50b1649965
74 files changed
+5949 -239

No files matched your search

@@ -1,9 +1,11 @@
package useCases
import (
"RenewCMS/internal/domain/audit"
"RenewCMS/internal/domain/hash"
"RenewCMS/internal/domain/mail"
"RenewCMS/internal/domain/user"
"context"
"log"
"time"
@@ -15,6 +17,7 @@ type RequestPasswordResetUseCase struct {
hasher hash.Hasher
mailRepository mail.Repository
publicURL string
recorder audit.Recorder
}
type MailPasswordResetData struct {
@@ -23,11 +26,11 @@ type MailPasswordResetData struct {
Email string
}
func NewRequestPasswordResetUseCase(userRepository user.Repository, hasher hash.Hasher, mailRepository mail.Repository, publicURL string) *RequestPasswordResetUseCase {
return &RequestPasswordResetUseCase{userRepository, hasher, mailRepository, publicURL}
func NewRequestPasswordResetUseCase(userRepository user.Repository, hasher hash.Hasher, mailRepository mail.Repository, publicURL string, recorder audit.Recorder) *RequestPasswordResetUseCase {
return &RequestPasswordResetUseCase{userRepository, hasher, mailRepository, publicURL, recorder}
}
func (g *RequestPasswordResetUseCase) RequestPasswordReset(email string) error {
func (g *RequestPasswordResetUseCase) RequestPasswordReset(ctx context.Context, email string) error {
foundUser, err := g.userRepository.GetByEmail(email)
if err != nil {
return nil
@@ -46,6 +49,8 @@ func (g *RequestPasswordResetUseCase) RequestPasswordReset(email string) error {
return nil
}
g.recordRequest(ctx, foundUser)
if err := g.mailRepository.Send(foundUser.Email, "password-reset", MailPasswordResetData{
Host: g.publicURL,
VerificationCode: rawCode,
@@ -57,3 +62,10 @@ func (g *RequestPasswordResetUseCase) RequestPasswordReset(email string) error {
return nil
}
func (g *RequestPasswordResetUseCase) recordRequest(ctx context.Context, requester user.User) {
event := audit.NewEvent(audit.ActionPasswordResetRequest, audit.CategoryAuth)
event.Actor = audit.UserActor(requester)
event.Security = true
g.recorder.Record(ctx, event)
}