mirror of
				https://github.com/zitadel/zitadel.git
				synced 2025-10-31 01:03:55 +00:00 
			
		
		
		
	 e318139b37
			
		
	
	e318139b37
	
	
	
		
			
			* implement notification providers * email provider * notification handler * notify users * implement code sent on user eventstore * send email implementation * send init code * handle codes * fix project member handler * add some logs for debug * send emails * text changes * send sms * notification process * send password code * format phone number * test format phone * remove fmts * remove unused code * rename files * add mocks * merge master * Update internal/notification/providers/email/message.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/providers/email/provider.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * requested changes of mr * move locker to eventstore pkg * Update internal/notification/providers/chat/message.go Co-authored-by: Livio Amstutz <livio.a@gmail.com> * move locker to eventstore pkg * linebreak * Update internal/notification/providers/email/provider.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> * Update internal/notification/repository/eventsourcing/handler/notification.go Co-authored-by: Silvan <silvan.reusser@gmail.com> Co-authored-by: Silvan <silvan.reusser@gmail.com> Co-authored-by: Livio Amstutz <livio.a@gmail.com>
		
			
				
	
	
		
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package view
 | |
| 
 | |
| import (
 | |
| 	"github.com/caos/zitadel/internal/errors"
 | |
| 	"github.com/caos/zitadel/internal/model"
 | |
| 	"github.com/jinzhu/gorm"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	errViewNameKey  = "view_name"
 | |
| 	errFailedSeqKey = "failed_sequence"
 | |
| )
 | |
| 
 | |
| type FailedEvent struct {
 | |
| 	ViewName       string `gorm:"column:view_name;primary_key"`
 | |
| 	FailedSequence uint64 `gorm:"column:failed_sequence;primary_key`
 | |
| 	FailureCount   uint64 `gorm:"column:failure_count`
 | |
| 	ErrMsg         string `gorm:"column:err_msg`
 | |
| }
 | |
| 
 | |
| type FailedEventSearchQuery struct {
 | |
| 	Key    FailedEventSearchKey
 | |
| 	Method model.SearchMethod
 | |
| 	Value  interface{}
 | |
| }
 | |
| 
 | |
| func (req FailedEventSearchQuery) GetKey() ColumnKey {
 | |
| 	return failedEventSearchKey(req.Key)
 | |
| }
 | |
| 
 | |
| func (req FailedEventSearchQuery) GetMethod() model.SearchMethod {
 | |
| 	return req.Method
 | |
| }
 | |
| 
 | |
| func (req FailedEventSearchQuery) GetValue() interface{} {
 | |
| 	return req.Value
 | |
| }
 | |
| 
 | |
| type FailedEventSearchKey int32
 | |
| 
 | |
| const (
 | |
| 	FAILEDEVENTKEY_UNDEFINED FailedEventSearchKey = iota
 | |
| 	FAILEDEVENTKEY_VIEW_NAME
 | |
| 	FAILEDEVENTKEY_FAILED_SEQUENCE
 | |
| )
 | |
| 
 | |
| type failedEventSearchKey FailedEventSearchKey
 | |
| 
 | |
| func (key failedEventSearchKey) ToColumnName() string {
 | |
| 	switch FailedEventSearchKey(key) {
 | |
| 	case FAILEDEVENTKEY_VIEW_NAME:
 | |
| 		return "view_name"
 | |
| 	case FAILEDEVENTKEY_FAILED_SEQUENCE:
 | |
| 		return "failed_sequence"
 | |
| 	default:
 | |
| 		return ""
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func SaveFailedEvent(db *gorm.DB, table string, failedEvent *FailedEvent) error {
 | |
| 	save := PrepareSave(table)
 | |
| 	err := save(db, failedEvent)
 | |
| 
 | |
| 	if err != nil {
 | |
| 		return errors.ThrowInternal(err, "VIEW-5kOhP", "unable to updated failed events")
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func LatestFailedEvent(db *gorm.DB, table, viewName string, sequence uint64) (*FailedEvent, error) {
 | |
| 	failedEvent := new(FailedEvent)
 | |
| 	queries := []SearchQuery{
 | |
| 		FailedEventSearchQuery{Key: FAILEDEVENTKEY_VIEW_NAME, Method: model.SEARCHMETHOD_EQUALS_IGNORE_CASE, Value: viewName},
 | |
| 		FailedEventSearchQuery{Key: FAILEDEVENTKEY_FAILED_SEQUENCE, Method: model.SEARCHMETHOD_EQUALS, Value: sequence},
 | |
| 	}
 | |
| 	query := PrepareGetByQuery(table, queries...)
 | |
| 	err := query(db, failedEvent)
 | |
| 
 | |
| 	if err == nil && failedEvent.ViewName != "" {
 | |
| 		return failedEvent, nil
 | |
| 	}
 | |
| 
 | |
| 	if errors.IsNotFound(err) {
 | |
| 		failedEvent.ViewName = viewName
 | |
| 		failedEvent.FailedSequence = sequence
 | |
| 		failedEvent.FailureCount = 0
 | |
| 		return failedEvent, nil
 | |
| 	}
 | |
| 	return nil, errors.ThrowInternalf(err, "VIEW-9LyCB", "unable to get failed events of %s", viewName)
 | |
| 
 | |
| }
 |