mirror of
https://github.com/btouchard/ackify-ce.git
synced 2026-02-05 21:40:05 -06:00
fix: remove invalid coreapp from merge
This commit is contained in:
@@ -1,51 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/btouchard/ackify-ce/internal/domain/models"
|
||||
)
|
||||
|
||||
type expectedSignerRepo interface {
|
||||
ListByDocID(ctx context.Context, docID string) ([]*models.ExpectedSigner, error)
|
||||
ListWithStatusByDocID(ctx context.Context, docID string) ([]*models.ExpectedSignerWithStatus, error)
|
||||
AddExpected(ctx context.Context, docID string, contacts []models.ContactInfo, addedBy string) error
|
||||
Remove(ctx context.Context, docID, email string) error
|
||||
GetStats(ctx context.Context, docID string) (*models.DocCompletionStats, error)
|
||||
}
|
||||
|
||||
// ExpectedSignerService handles expected signer operations
|
||||
type ExpectedSignerService struct {
|
||||
repo expectedSignerRepo
|
||||
}
|
||||
|
||||
// NewExpectedSignerService creates a new expected signer service
|
||||
func NewExpectedSignerService(repo expectedSignerRepo) *ExpectedSignerService {
|
||||
return &ExpectedSignerService{repo: repo}
|
||||
}
|
||||
|
||||
// ListByDocID returns all expected signers for a document
|
||||
func (s *ExpectedSignerService) ListByDocID(ctx context.Context, docID string) ([]*models.ExpectedSigner, error) {
|
||||
return s.repo.ListByDocID(ctx, docID)
|
||||
}
|
||||
|
||||
// ListWithStatusByDocID returns all expected signers with their signature status
|
||||
func (s *ExpectedSignerService) ListWithStatusByDocID(ctx context.Context, docID string) ([]*models.ExpectedSignerWithStatus, error) {
|
||||
return s.repo.ListWithStatusByDocID(ctx, docID)
|
||||
}
|
||||
|
||||
// AddExpected adds expected signers to a document
|
||||
func (s *ExpectedSignerService) AddExpected(ctx context.Context, docID string, contacts []models.ContactInfo, addedBy string) error {
|
||||
return s.repo.AddExpected(ctx, docID, contacts, addedBy)
|
||||
}
|
||||
|
||||
// Remove removes an expected signer from a document
|
||||
func (s *ExpectedSignerService) Remove(ctx context.Context, docID, email string) error {
|
||||
return s.repo.Remove(ctx, docID, email)
|
||||
}
|
||||
|
||||
// GetStats returns completion statistics for a document
|
||||
func (s *ExpectedSignerService) GetStats(ctx context.Context, docID string) (*models.DocCompletionStats, error) {
|
||||
return s.repo.GetStats(ctx, docID)
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
package authorization
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"github.com/btouchard/ackify-ce/internal/domain/models"
|
||||
)
|
||||
|
||||
type CEDocumentAuthorizer struct {
|
||||
adminEmails []string
|
||||
onlyAdminCanCreate bool
|
||||
}
|
||||
|
||||
func NewCEDocumentAuthorizer(adminEmails []string, onlyAdminCanCreate bool) *CEDocumentAuthorizer {
|
||||
return &CEDocumentAuthorizer{
|
||||
adminEmails: adminEmails,
|
||||
onlyAdminCanCreate: onlyAdminCanCreate,
|
||||
}
|
||||
}
|
||||
|
||||
func (a *CEDocumentAuthorizer) CanCreateDocument(ctx context.Context, user *models.User) bool {
|
||||
if !a.onlyAdminCanCreate {
|
||||
return true
|
||||
}
|
||||
|
||||
if user == nil {
|
||||
return false
|
||||
}
|
||||
|
||||
for _, adminEmail := range a.adminEmails {
|
||||
if strings.EqualFold(user.Email, adminEmail) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
package coreapp
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/btouchard/ackify-ce/internal/application/services"
|
||||
"github.com/btouchard/ackify-ce/internal/domain/models"
|
||||
)
|
||||
|
||||
type DocumentService interface {
|
||||
// Creation
|
||||
CreateDocument(ctx context.Context, req services.CreateDocumentRequest) (*models.Document, error)
|
||||
FindOrCreateDocument(ctx context.Context, ref string) (*models.Document, bool, error)
|
||||
FindByReference(ctx context.Context, ref string, refType string) (*models.Document, error)
|
||||
// Read
|
||||
List(ctx context.Context, limit, offset int) ([]*models.Document, error)
|
||||
Search(ctx context.Context, query string, limit, offset int) ([]*models.Document, error)
|
||||
Count(ctx context.Context, searchQuery string) (int, error)
|
||||
GetByDocID(ctx context.Context, docID string) (*models.Document, error)
|
||||
// Write
|
||||
CreateOrUpdate(ctx context.Context, docID string, input models.DocumentInput, createdBy string) (*models.Document, error)
|
||||
Delete(ctx context.Context, docID string) error
|
||||
}
|
||||
|
||||
type SignatureService interface {
|
||||
CreateSignature(ctx context.Context, request *models.SignatureRequest) error
|
||||
GetSignatureStatus(ctx context.Context, docID string, user *models.User) (*models.SignatureStatus, error)
|
||||
GetSignatureByDocAndUser(ctx context.Context, docID string, user *models.User) (*models.Signature, error)
|
||||
GetDocumentSignatures(ctx context.Context, docID string) ([]*models.Signature, error)
|
||||
GetUserSignatures(ctx context.Context, user *models.User) ([]*models.Signature, error)
|
||||
}
|
||||
|
||||
type ExpectedSignerService interface {
|
||||
ListByDocID(ctx context.Context, docID string) ([]*models.ExpectedSigner, error)
|
||||
ListWithStatusByDocID(ctx context.Context, docID string) ([]*models.ExpectedSignerWithStatus, error)
|
||||
AddExpected(ctx context.Context, docID string, contacts []models.ContactInfo, addedBy string) error
|
||||
Remove(ctx context.Context, docID, email string) error
|
||||
GetStats(ctx context.Context, docID string) (*models.DocCompletionStats, error)
|
||||
}
|
||||
|
||||
type ReminderService interface {
|
||||
SendReminders(ctx context.Context, docID, sentBy string, specificEmails []string, docURL string, locale string) (*models.ReminderSendResult, error)
|
||||
GetReminderHistory(ctx context.Context, docID string) ([]*models.ReminderLog, error)
|
||||
GetReminderStats(ctx context.Context, docID string) (*models.ReminderStats, error)
|
||||
}
|
||||
|
||||
type WebhookPublisher interface {
|
||||
Publish(ctx context.Context, eventType string, payload map[string]interface{}) error
|
||||
}
|
||||
|
||||
type DocumentAuthorizer interface {
|
||||
CanCreateDocument(ctx context.Context, user *models.User) bool
|
||||
}
|
||||
|
||||
type CoreDeps struct {
|
||||
Documents DocumentService
|
||||
DocumentAuthorizer DocumentAuthorizer
|
||||
Signatures SignatureService
|
||||
ExpectedSigners ExpectedSignerService
|
||||
Reminders ReminderService
|
||||
WebhookPublisher WebhookPublisher
|
||||
BaseURL string
|
||||
ImportMaxSigners int
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
package coreapp
|
||||
|
||||
import (
|
||||
"github.com/btouchard/ackify-ce/internal/presentation/api/admin"
|
||||
"github.com/btouchard/ackify-ce/internal/presentation/api/documents"
|
||||
"github.com/btouchard/ackify-ce/internal/presentation/api/signatures"
|
||||
)
|
||||
|
||||
type CoreHandlers struct {
|
||||
Documents *documents.Handler
|
||||
Signatures *signatures.Handler
|
||||
Admin *admin.Handler
|
||||
}
|
||||
|
||||
func NewCoreHandlers(deps CoreDeps) *CoreHandlers {
|
||||
return &CoreHandlers{
|
||||
Documents: documents.NewHandler(
|
||||
deps.Signatures,
|
||||
deps.Documents,
|
||||
deps.Documents, // DocumentService implements documentRepository interface
|
||||
deps.ExpectedSigners, // ExpectedSignerService implements expectedSignerRepository interface
|
||||
deps.WebhookPublisher,
|
||||
deps.DocumentAuthorizer,
|
||||
),
|
||||
Signatures: signatures.NewHandler(
|
||||
deps.Signatures,
|
||||
deps.ExpectedSigners, // ExpectedSignerService implements expectedSignerStatsRepo interface
|
||||
deps.WebhookPublisher,
|
||||
),
|
||||
Admin: admin.NewHandler(
|
||||
deps.Documents, // DocumentService implements documentRepository interface
|
||||
deps.ExpectedSigners, // ExpectedSignerService implements expectedSignerRepository interface
|
||||
deps.Reminders,
|
||||
deps.Signatures,
|
||||
deps.BaseURL,
|
||||
deps.ImportMaxSigners,
|
||||
),
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
package coreapp
|
||||
|
||||
import "github.com/go-chi/chi/v5"
|
||||
|
||||
type RouteRegistrar func(r chi.Router)
|
||||
|
||||
type HandlerGroups struct {
|
||||
RegisterPublic RouteRegistrar
|
||||
RegisterUser RouteRegistrar
|
||||
RegisterAdmin RouteRegistrar
|
||||
}
|
||||
|
||||
func NewHandlerGroups(deps CoreDeps) HandlerGroups {
|
||||
h := NewCoreHandlers(deps)
|
||||
|
||||
return HandlerGroups{
|
||||
RegisterPublic: func(r chi.Router) {
|
||||
r.Route("/documents", func(r chi.Router) {
|
||||
r.Get("/", h.Documents.HandleListDocuments)
|
||||
r.Get("/{docId}", h.Documents.HandleGetDocument)
|
||||
r.Get("/{docId}/signatures", h.Documents.HandleGetDocumentSignatures)
|
||||
r.Get("/{docId}/expected-signers", h.Documents.HandleGetExpectedSigners)
|
||||
})
|
||||
},
|
||||
|
||||
RegisterUser: func(r chi.Router) {
|
||||
r.Post("/documents", h.Documents.HandleCreateDocument)
|
||||
r.Get("/documents/find-or-create", h.Documents.HandleFindOrCreateDocument)
|
||||
r.Get("/signatures", h.Signatures.HandleGetUserSignatures)
|
||||
r.Post("/signatures", h.Signatures.HandleCreateSignature)
|
||||
r.Get("/documents/{docId}/signatures/status", h.Signatures.HandleGetSignatureStatus)
|
||||
},
|
||||
|
||||
RegisterAdmin: func(r chi.Router) {
|
||||
r.Route("/admin/documents", func(r chi.Router) {
|
||||
r.Get("/", h.Admin.HandleListDocuments)
|
||||
r.Get("/{docId}", h.Admin.HandleGetDocument)
|
||||
r.Get("/{docId}/signers", h.Admin.HandleGetDocumentWithSigners)
|
||||
r.Get("/{docId}/status", h.Admin.HandleGetDocumentStatus)
|
||||
r.Put("/{docId}/metadata", h.Admin.HandleUpdateDocumentMetadata)
|
||||
r.Delete("/{docId}", h.Admin.HandleDeleteDocument)
|
||||
r.Post("/{docId}/signers", h.Admin.HandleAddExpectedSigner)
|
||||
r.Delete("/{docId}/signers/{email}", h.Admin.HandleRemoveExpectedSigner)
|
||||
r.Post("/{docId}/signers/preview-csv", h.Admin.HandlePreviewCSV)
|
||||
r.Post("/{docId}/signers/import", h.Admin.HandleImportSigners)
|
||||
r.Post("/{docId}/reminders", h.Admin.HandleSendReminders)
|
||||
r.Get("/{docId}/reminders", h.Admin.HandleGetReminderHistory)
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user