mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 18:07:31 +00:00
feat: text query (#2735)
* feat: change mail template to new query side * feat: adminapi message text * feat: adminapi message text * feat: adminapi message text * feat: message texts * feat: admin texts * feat: tests * feat: tests * feat: custom login text on adminapi * feat: custom login text * feat: custom login text * feat: message text prepare test * feat: login text texts * feat: custom login text * merge main * fix go.sum Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
@@ -2,34 +2,26 @@ package eventstore
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/caos/logging"
|
||||
"golang.org/x/text/language"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
admin_view "github.com/caos/zitadel/internal/admin/repository/eventsourcing/view"
|
||||
"github.com/caos/zitadel/internal/config/systemdefaults"
|
||||
"github.com/caos/zitadel/internal/domain"
|
||||
v1 "github.com/caos/zitadel/internal/eventstore/v1"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/i18n"
|
||||
iam_view "github.com/caos/zitadel/internal/iam/repository/view"
|
||||
"github.com/caos/zitadel/internal/query"
|
||||
"github.com/caos/zitadel/internal/user/repository/view/model"
|
||||
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
|
||||
"github.com/caos/logging"
|
||||
|
||||
admin_view "github.com/caos/zitadel/internal/admin/repository/eventsourcing/view"
|
||||
"github.com/caos/zitadel/internal/config/systemdefaults"
|
||||
iam_model "github.com/caos/zitadel/internal/iam/model"
|
||||
iam_view "github.com/caos/zitadel/internal/iam/repository/view"
|
||||
iam_es_model "github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
"github.com/caos/zitadel/internal/query"
|
||||
"github.com/caos/zitadel/internal/telemetry/tracing"
|
||||
usr_model "github.com/caos/zitadel/internal/user/model"
|
||||
"github.com/caos/zitadel/internal/user/repository/view/model"
|
||||
)
|
||||
|
||||
type IAMRepository struct {
|
||||
@@ -167,14 +159,6 @@ func (repo *IAMRepository) SearchDefaultIDPProviders(ctx context.Context, reques
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) GetDefaultMailTemplate(ctx context.Context) (*iam_model.MailTemplateView, error) {
|
||||
template, err := repo.View.MailTemplateByAggregateID(repo.SystemDefaults.IamID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return iam_es_model.MailTemplateViewToModel(template), err
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) SearchIAMMembersx(ctx context.Context, request *iam_model.IAMMemberSearchRequest) (*iam_model.IAMMemberSearchResponse, error) {
|
||||
err := request.EnsureLimit(repo.SearchLimit)
|
||||
if err != nil {
|
||||
@@ -198,68 +182,6 @@ func (repo *IAMRepository) SearchIAMMembersx(ctx context.Context, request *iam_m
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) GetDefaultMessageText(ctx context.Context, textType, lang string) (*domain.CustomMessageText, error) {
|
||||
repo.mutex.Lock()
|
||||
defer repo.mutex.Unlock()
|
||||
var err error
|
||||
contents, ok := repo.NotificationTranslationFileContents[lang]
|
||||
if !ok {
|
||||
contents, err = repo.readTranslationFile(repo.NotificationDir, fmt.Sprintf("/i18n/%s.yaml", lang))
|
||||
if caos_errs.IsNotFound(err) {
|
||||
contents, err = repo.readTranslationFile(repo.NotificationDir, fmt.Sprintf("/i18n/%s.yaml", repo.SystemDefaults.DefaultLanguage.String()))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
repo.NotificationTranslationFileContents[lang] = contents
|
||||
}
|
||||
messageTexts := new(domain.MessageTexts)
|
||||
if err := yaml.Unmarshal(contents, messageTexts); err != nil {
|
||||
return nil, caos_errs.ThrowInternal(err, "TEXT-3N9fs", "Errors.TranslationFile.ReadError")
|
||||
}
|
||||
return messageTexts.GetMessageTextByType(textType), nil
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) GetCustomMessageText(ctx context.Context, textType, lang string) (*domain.CustomMessageText, error) {
|
||||
texts, err := repo.View.CustomTextsByAggregateIDAndTemplateAndLand(repo.SystemDefaults.IamID, textType, lang)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := iam_es_model.CustomTextViewsToMessageDomain(repo.SystemDefaults.IamID, lang, texts)
|
||||
result.Default = true
|
||||
return result, err
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) GetDefaultLoginTexts(ctx context.Context, lang string) (*domain.CustomLoginText, error) {
|
||||
repo.mutex.Lock()
|
||||
defer repo.mutex.Unlock()
|
||||
contents, ok := repo.LoginTranslationFileContents[lang]
|
||||
var err error
|
||||
if !ok {
|
||||
contents, err = repo.readTranslationFile(repo.LoginDir, fmt.Sprintf("/i18n/%s.yaml", lang))
|
||||
if caos_errs.IsNotFound(err) {
|
||||
contents, err = repo.readTranslationFile(repo.LoginDir, fmt.Sprintf("/i18n/%s.yaml", repo.SystemDefaults.DefaultLanguage.String()))
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
repo.LoginTranslationFileContents[lang] = contents
|
||||
}
|
||||
loginText := new(domain.CustomLoginText)
|
||||
if err := yaml.Unmarshal(contents, loginText); err != nil {
|
||||
return nil, caos_errs.ThrowInternal(err, "TEXT-GHR3Q", "Errors.TranslationFile.ReadError")
|
||||
}
|
||||
return loginText, nil
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) GetCustomLoginTexts(ctx context.Context, lang string) (*domain.CustomLoginText, error) {
|
||||
texts, err := repo.View.CustomTextsByAggregateIDAndTemplateAndLand(repo.SystemDefaults.IamID, domain.LoginCustomText, lang)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return iam_es_model.CustomTextViewsToLoginDomain(repo.SystemDefaults.IamID, lang, texts), err
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) getIAMEvents(ctx context.Context, sequence uint64) ([]*models.Event, error) {
|
||||
query, err := iam_view.IAMByIDQuery(domain.IAMID, sequence)
|
||||
if err != nil {
|
||||
@@ -267,18 +189,3 @@ func (repo *IAMRepository) getIAMEvents(ctx context.Context, sequence uint64) ([
|
||||
}
|
||||
return repo.Eventstore.FilterEvents(ctx, query)
|
||||
}
|
||||
|
||||
func (repo *IAMRepository) readTranslationFile(dir http.FileSystem, filename string) ([]byte, error) {
|
||||
r, err := dir.Open(filename)
|
||||
if os.IsNotExist(err) {
|
||||
return nil, caos_errs.ThrowNotFound(err, "TEXT-3n9fs", "Errors.TranslationFile.NotFound")
|
||||
}
|
||||
if err != nil {
|
||||
return nil, caos_errs.ThrowInternal(err, "TEXT-93njw", "Errors.TranslationFile.ReadError")
|
||||
}
|
||||
contents, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return nil, caos_errs.ThrowInternal(err, "TEXT-l0fse", "Errors.TranslationFile.ReadError")
|
||||
}
|
||||
return contents, nil
|
||||
}
|
||||
|
@@ -1,133 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/caos/logging"
|
||||
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1"
|
||||
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/query"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/spooler"
|
||||
iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model"
|
||||
iam_model "github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
"github.com/caos/zitadel/internal/org/repository/eventsourcing/model"
|
||||
)
|
||||
|
||||
type CustomText struct {
|
||||
handler
|
||||
subscription *v1.Subscription
|
||||
}
|
||||
|
||||
func newCustomText(handler handler) *CustomText {
|
||||
h := &CustomText{
|
||||
handler: handler,
|
||||
}
|
||||
|
||||
h.subscribe()
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
func (m *CustomText) subscribe() {
|
||||
m.subscription = m.es.Subscribe(m.AggregateTypes()...)
|
||||
go func() {
|
||||
for event := range m.subscription.Events {
|
||||
query.ReduceEvent(m, event)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
const (
|
||||
customTextTable = "adminapi.custom_texts"
|
||||
)
|
||||
|
||||
func (m *CustomText) Subscription() *v1.Subscription {
|
||||
return m.subscription
|
||||
}
|
||||
|
||||
func (m *CustomText) ViewModel() string {
|
||||
return customTextTable
|
||||
}
|
||||
|
||||
func (_ *CustomText) AggregateTypes() []es_models.AggregateType {
|
||||
return []es_models.AggregateType{model.OrgAggregate, iam_es_model.IAMAggregate}
|
||||
}
|
||||
|
||||
func (p *CustomText) CurrentSequence() (uint64, error) {
|
||||
sequence, err := p.view.GetLatestCustomTextSequence()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return sequence.CurrentSequence, nil
|
||||
}
|
||||
|
||||
func (m *CustomText) EventQuery() (*es_models.SearchQuery, error) {
|
||||
sequence, err := m.view.GetLatestCustomTextSequence()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return es_models.NewSearchQuery().
|
||||
AggregateTypeFilter(m.AggregateTypes()...).
|
||||
LatestSequenceFilter(sequence.CurrentSequence), nil
|
||||
}
|
||||
|
||||
func (m *CustomText) Reduce(event *es_models.Event) (err error) {
|
||||
switch event.AggregateType {
|
||||
case model.OrgAggregate, iam_es_model.IAMAggregate:
|
||||
err = m.processCustomText(event)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *CustomText) processCustomText(event *es_models.Event) (err error) {
|
||||
customText := new(iam_model.CustomTextView)
|
||||
switch event.Type {
|
||||
case iam_es_model.CustomTextSet, model.CustomTextSet:
|
||||
text := new(iam_model.CustomTextView)
|
||||
err = text.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
customText, err = m.view.CustomTextByIDs(event.AggregateID, text.Template, text.Key, text.Language)
|
||||
if err != nil && !caos_errs.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
if caos_errs.IsNotFound(err) {
|
||||
err = nil
|
||||
customText = new(iam_model.CustomTextView)
|
||||
customText.Language = text.Language
|
||||
customText.Template = text.Template
|
||||
customText.CreationDate = event.CreationDate
|
||||
}
|
||||
err = customText.AppendEvent(event)
|
||||
case iam_es_model.CustomTextRemoved, model.CustomTextRemoved:
|
||||
text := new(iam_model.CustomTextView)
|
||||
err = text.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.view.DeleteCustomText(event.AggregateID, text.Template, text.Language, text.Key, event)
|
||||
case iam_es_model.CustomTextMessageRemoved, model.CustomTextMessageRemoved:
|
||||
text := new(iam_model.CustomTextView)
|
||||
err = text.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.view.DeleteCustomTextTemplate(event.AggregateID, text.Template, text.Language, event)
|
||||
default:
|
||||
return m.view.ProcessedCustomTextSequence(event)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.view.PutCustomText(customText, event)
|
||||
}
|
||||
|
||||
func (m *CustomText) OnError(event *es_models.Event, err error) error {
|
||||
logging.LogWithFields("SPOOL-3m912", "id", event.AggregateID).WithError(err).Warn("something went wrong in custom text handler")
|
||||
return spooler.HandleError(event, err, m.view.GetLatestCustomTextFailedEvent, m.view.ProcessedCustomTextFailedEvent, m.view.ProcessedCustomTextSequence, m.errorCountUntilSkip)
|
||||
}
|
||||
|
||||
func (o *CustomText) OnSuccess() error {
|
||||
return spooler.HandleSuccess(o.view.UpdateCustomTextSpoolerRunTimestamp)
|
||||
}
|
@@ -46,12 +46,6 @@ func Register(configs Configs, bulkLimit, errorCount uint64, view *view.View, es
|
||||
newExternalIDP(
|
||||
handler{view, bulkLimit, configs.cycleDuration("ExternalIDP"), errorCount, es},
|
||||
defaults),
|
||||
newMailTemplate(
|
||||
handler{view, bulkLimit, configs.cycleDuration("MailTemplate"), errorCount, es}),
|
||||
newMessageText(
|
||||
handler{view, bulkLimit, configs.cycleDuration("MessageText"), errorCount, es}),
|
||||
newCustomText(
|
||||
handler{view, bulkLimit, configs.cycleDuration("CustomTexts"), errorCount, es}),
|
||||
}
|
||||
if static != nil {
|
||||
handlers = append(handlers, newStyling(
|
||||
|
@@ -1,108 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/caos/logging"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1"
|
||||
|
||||
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/query"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/spooler"
|
||||
"github.com/caos/zitadel/internal/iam/repository/eventsourcing/model"
|
||||
iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model"
|
||||
iam_model "github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
)
|
||||
|
||||
type MailTemplate struct {
|
||||
handler
|
||||
subscription *v1.Subscription
|
||||
}
|
||||
|
||||
func newMailTemplate(handler handler) *MailTemplate {
|
||||
h := &MailTemplate{
|
||||
handler: handler,
|
||||
}
|
||||
|
||||
h.subscribe()
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
func (m *MailTemplate) subscribe() {
|
||||
m.subscription = m.es.Subscribe(m.AggregateTypes()...)
|
||||
go func() {
|
||||
for event := range m.subscription.Events {
|
||||
query.ReduceEvent(m, event)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
const (
|
||||
mailTemplateTable = "adminapi.mail_templates"
|
||||
)
|
||||
|
||||
func (m *MailTemplate) ViewModel() string {
|
||||
return mailTemplateTable
|
||||
}
|
||||
|
||||
func (m *MailTemplate) Subscription() *v1.Subscription {
|
||||
return m.subscription
|
||||
}
|
||||
|
||||
func (m *MailTemplate) AggregateTypes() []es_models.AggregateType {
|
||||
return []es_models.AggregateType{iam_es_model.IAMAggregate}
|
||||
}
|
||||
|
||||
func (m *MailTemplate) CurrentSequence() (uint64, error) {
|
||||
sequence, err := m.view.GetLatestMailTemplateSequence()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return sequence.CurrentSequence, nil
|
||||
}
|
||||
|
||||
func (m *MailTemplate) EventQuery() (*es_models.SearchQuery, error) {
|
||||
sequence, err := m.view.GetLatestMailTemplateSequence()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return es_models.NewSearchQuery().
|
||||
AggregateTypeFilter(m.AggregateTypes()...).
|
||||
LatestSequenceFilter(sequence.CurrentSequence), nil
|
||||
}
|
||||
|
||||
func (m *MailTemplate) Reduce(event *es_models.Event) (err error) {
|
||||
switch event.AggregateType {
|
||||
case model.IAMAggregate:
|
||||
err = m.processMailTemplate(event)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *MailTemplate) processMailTemplate(event *es_models.Event) (err error) {
|
||||
template := new(iam_model.MailTemplateView)
|
||||
switch event.Type {
|
||||
case model.MailTemplateAdded:
|
||||
err = template.AppendEvent(event)
|
||||
case model.MailTemplateChanged:
|
||||
template, err = m.view.MailTemplateByAggregateID(event.AggregateID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = template.AppendEvent(event)
|
||||
default:
|
||||
return m.view.ProcessedMailTemplateSequence(event)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.view.PutMailTemplate(template, event)
|
||||
}
|
||||
|
||||
func (m *MailTemplate) OnError(event *es_models.Event, err error) error {
|
||||
logging.LogWithFields("SPOOL-Wj8sf", "id", event.AggregateID).WithError(err).Warn("something went wrong in label template handler")
|
||||
return spooler.HandleError(event, err, m.view.GetLatestMailTemplateFailedEvent, m.view.ProcessedMailTemplateFailedEvent, m.view.ProcessedMailTemplateSequence, m.errorCountUntilSkip)
|
||||
}
|
||||
|
||||
func (m *MailTemplate) OnSuccess() error {
|
||||
return spooler.HandleSuccess(m.view.UpdateMailTemplateSpoolerRunTimestamp)
|
||||
}
|
@@ -1,121 +0,0 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/caos/logging"
|
||||
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1"
|
||||
|
||||
es_models "github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/query"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/spooler"
|
||||
"github.com/caos/zitadel/internal/iam/repository/eventsourcing/model"
|
||||
iam_es_model "github.com/caos/zitadel/internal/iam/repository/eventsourcing/model"
|
||||
iam_model "github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
)
|
||||
|
||||
type MessageText struct {
|
||||
handler
|
||||
subscription *v1.Subscription
|
||||
}
|
||||
|
||||
func newMessageText(handler handler) *MessageText {
|
||||
h := &MessageText{
|
||||
handler: handler,
|
||||
}
|
||||
|
||||
h.subscribe()
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
func (m *MessageText) subscribe() {
|
||||
m.subscription = m.es.Subscribe(m.AggregateTypes()...)
|
||||
go func() {
|
||||
for event := range m.subscription.Events {
|
||||
query.ReduceEvent(m, event)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
const (
|
||||
mailTextTable = "adminapi.message_texts"
|
||||
)
|
||||
|
||||
func (m *MessageText) ViewModel() string {
|
||||
return mailTextTable
|
||||
}
|
||||
|
||||
func (m *MessageText) Subscription() *v1.Subscription {
|
||||
return m.subscription
|
||||
}
|
||||
|
||||
func (_ *MessageText) AggregateTypes() []es_models.AggregateType {
|
||||
return []es_models.AggregateType{iam_es_model.IAMAggregate}
|
||||
}
|
||||
|
||||
func (p *MessageText) CurrentSequence() (uint64, error) {
|
||||
sequence, err := p.view.GetLatestMessageTextSequence()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return sequence.CurrentSequence, nil
|
||||
}
|
||||
|
||||
func (m *MessageText) EventQuery() (*es_models.SearchQuery, error) {
|
||||
sequence, err := m.view.GetLatestMessageTextSequence()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return es_models.NewSearchQuery().
|
||||
AggregateTypeFilter(m.AggregateTypes()...).
|
||||
LatestSequenceFilter(sequence.CurrentSequence), nil
|
||||
}
|
||||
|
||||
func (m *MessageText) Reduce(event *es_models.Event) (err error) {
|
||||
switch event.AggregateType {
|
||||
case model.IAMAggregate:
|
||||
err = m.processMessageText(event)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (m *MessageText) processMessageText(event *es_models.Event) (err error) {
|
||||
message := new(iam_model.MessageTextView)
|
||||
switch event.Type {
|
||||
case model.CustomTextSet,
|
||||
model.CustomTextRemoved:
|
||||
text := new(iam_model.CustomTextView)
|
||||
err = text.SetData(event)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
message, err = m.view.MessageTextByIDs(event.AggregateID, text.Template, text.Language)
|
||||
if err != nil && !caos_errs.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
if caos_errs.IsNotFound(err) {
|
||||
err = nil
|
||||
message = new(iam_model.MessageTextView)
|
||||
message.Language = text.Language
|
||||
message.MessageTextType = text.Template
|
||||
message.CreationDate = event.CreationDate
|
||||
}
|
||||
err = message.AppendEvent(event)
|
||||
default:
|
||||
return m.view.ProcessedMessageTextSequence(event)
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return m.view.PutMessageText(message, event)
|
||||
}
|
||||
|
||||
func (m *MessageText) OnError(event *es_models.Event, err error) error {
|
||||
logging.LogWithFields("HANDL-5jk84", "id", event.AggregateID).WithError(err).Warn("something went wrong in label mailText handler")
|
||||
return spooler.HandleError(event, err, m.view.GetLatestMessageTextFailedEvent, m.view.ProcessedMessageTextFailedEvent, m.view.ProcessedMessageTextSequence, m.errorCountUntilSkip)
|
||||
}
|
||||
|
||||
func (o *MessageText) OnSuccess() error {
|
||||
return spooler.HandleSuccess(o.view.UpdateMessageTextSpoolerRunTimestamp)
|
||||
}
|
@@ -1,65 +0,0 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
global_view "github.com/caos/zitadel/internal/view/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
customTextTable = "adminapi.custom_texts"
|
||||
)
|
||||
|
||||
func (v *View) CustomTextByIDs(aggregateID, template, lang, key string) (*model.CustomTextView, error) {
|
||||
return view.CustomTextByIDs(v.Db, customTextTable, aggregateID, template, lang, key)
|
||||
}
|
||||
|
||||
func (v *View) CustomTextsByAggregateIDAndTemplateAndLand(aggregateID, template, lang string) ([]*model.CustomTextView, error) {
|
||||
return view.GetCustomTexts(v.Db, customTextTable, aggregateID, template, lang)
|
||||
}
|
||||
|
||||
func (v *View) PutCustomText(template *model.CustomTextView, event *models.Event) error {
|
||||
err := view.PutCustomText(v.Db, customTextTable, template)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return v.ProcessedCustomTextSequence(event)
|
||||
}
|
||||
|
||||
func (v *View) DeleteCustomText(aggregateID, textType, lang, key string, event *models.Event) error {
|
||||
err := view.DeleteCustomText(v.Db, customTextTable, aggregateID, textType, lang, key)
|
||||
if err != nil && !errors.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
return v.ProcessedCustomTextSequence(event)
|
||||
}
|
||||
|
||||
func (v *View) DeleteCustomTextTemplate(aggregateID, textType, lang string, event *models.Event) error {
|
||||
err := view.DeleteCustomTextTemplate(v.Db, customTextTable, aggregateID, textType, lang)
|
||||
if err != nil && !errors.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
return v.ProcessedCustomTextSequence(event)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestCustomTextSequence() (*global_view.CurrentSequence, error) {
|
||||
return v.latestSequence(customTextTable)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedCustomTextSequence(event *models.Event) error {
|
||||
return v.saveCurrentSequence(customTextTable, event)
|
||||
}
|
||||
|
||||
func (v *View) UpdateCustomTextSpoolerRunTimestamp() error {
|
||||
return v.updateSpoolerRunSequence(customTextTable)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestCustomTextFailedEvent(sequence uint64) (*global_view.FailedEvent, error) {
|
||||
return v.latestFailedEvent(customTextTable, sequence)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedCustomTextFailedEvent(failedEvent *global_view.FailedEvent) error {
|
||||
return v.saveFailedEvent(failedEvent)
|
||||
}
|
@@ -1,44 +0,0 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
global_view "github.com/caos/zitadel/internal/view/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
mailTemplateTable = "adminapi.mail_templates"
|
||||
)
|
||||
|
||||
func (v *View) MailTemplateByAggregateID(aggregateID string) (*model.MailTemplateView, error) {
|
||||
return view.GetMailTemplateByAggregateID(v.Db, mailTemplateTable, aggregateID)
|
||||
}
|
||||
|
||||
func (v *View) PutMailTemplate(template *model.MailTemplateView, event *models.Event) error {
|
||||
err := view.PutMailTemplate(v.Db, mailTemplateTable, template)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return v.ProcessedMailTemplateSequence(event)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestMailTemplateSequence() (*global_view.CurrentSequence, error) {
|
||||
return v.latestSequence(mailTemplateTable)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedMailTemplateSequence(event *models.Event) error {
|
||||
return v.saveCurrentSequence(mailTemplateTable, event)
|
||||
}
|
||||
|
||||
func (v *View) UpdateMailTemplateSpoolerRunTimestamp() error {
|
||||
return v.updateSpoolerRunSequence(mailTemplateTable)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestMailTemplateFailedEvent(sequence uint64) (*global_view.FailedEvent, error) {
|
||||
return v.latestFailedEvent(mailTemplateTable, sequence)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedMailTemplateFailedEvent(failedEvent *global_view.FailedEvent) error {
|
||||
return v.saveFailedEvent(failedEvent)
|
||||
}
|
@@ -1,48 +0,0 @@
|
||||
package view
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view"
|
||||
"github.com/caos/zitadel/internal/iam/repository/view/model"
|
||||
global_view "github.com/caos/zitadel/internal/view/repository"
|
||||
)
|
||||
|
||||
const (
|
||||
messageTextTable = "adminapi.message_texts"
|
||||
)
|
||||
|
||||
func (v *View) MessageTexts(aggregateID string) ([]*model.MessageTextView, error) {
|
||||
return view.GetMessageTexts(v.Db, messageTextTable, aggregateID)
|
||||
}
|
||||
|
||||
func (v *View) MessageTextByIDs(aggregateID, textType, lang string) (*model.MessageTextView, error) {
|
||||
return view.GetMessageTextByIDs(v.Db, messageTextTable, aggregateID, textType, lang)
|
||||
}
|
||||
|
||||
func (v *View) PutMessageText(template *model.MessageTextView, event *models.Event) error {
|
||||
err := view.PutMessageText(v.Db, messageTextTable, template)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return v.ProcessedMessageTextSequence(event)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestMessageTextSequence() (*global_view.CurrentSequence, error) {
|
||||
return v.latestSequence(messageTextTable)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedMessageTextSequence(event *models.Event) error {
|
||||
return v.saveCurrentSequence(messageTextTable, event)
|
||||
}
|
||||
|
||||
func (v *View) UpdateMessageTextSpoolerRunTimestamp() error {
|
||||
return v.updateSpoolerRunSequence(messageTextTable)
|
||||
}
|
||||
|
||||
func (v *View) GetLatestMessageTextFailedEvent(sequence uint64) (*global_view.FailedEvent, error) {
|
||||
return v.latestFailedEvent(messageTextTable, sequence)
|
||||
}
|
||||
|
||||
func (v *View) ProcessedMessageTextFailedEvent(failedEvent *global_view.FailedEvent) error {
|
||||
return v.saveFailedEvent(failedEvent)
|
||||
}
|
Reference in New Issue
Block a user