chore: changes to salty service
This commit is contained in:
		
							parent
							
								
									e118d06985
								
							
						
					
					
						commit
						7ae2a8ad25
					
				@ -127,10 +127,13 @@ func (s *service) getPending(w http.ResponseWriter, r *http.Request, uuid string
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	span.AddEvent(negotiated.String())
 | 
			
		||||
	switch negotiated.String() {
 | 
			
		||||
	mime := negotiated.String()
 | 
			
		||||
	switch mime {
 | 
			
		||||
	case "text/environment":
 | 
			
		||||
		w.Header().Set("content-type", negotiated.String())
 | 
			
		||||
		_, err = encodeTo(w, info.MarshalEnviron, req.MarshalEnviron)
 | 
			
		||||
	case "application/json":
 | 
			
		||||
		w.Header().Set("content-type", negotiated.String())
 | 
			
		||||
		var out interface{} = info
 | 
			
		||||
		if req != nil {
 | 
			
		||||
			out = struct {
 | 
			
		||||
 | 
			
		||||
@ -16,7 +16,6 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SaltyUser struct {
 | 
			
		||||
	name   string
 | 
			
		||||
	pubkey *keys.EdX25519PublicKey
 | 
			
		||||
	inbox  ulid.ULID
 | 
			
		||||
 | 
			
		||||
@ -30,30 +29,25 @@ func (a *SaltyUser) ApplyEvent(lis ...event.Event) {
 | 
			
		||||
	for _, e := range lis {
 | 
			
		||||
		switch e := e.(type) {
 | 
			
		||||
		case *UserRegistered:
 | 
			
		||||
			a.name = e.Name
 | 
			
		||||
			// a.name = e.Name
 | 
			
		||||
			a.pubkey = e.Pubkey
 | 
			
		||||
			a.inbox = e.EventMeta().EventID
 | 
			
		||||
			a.SetStreamID(a.streamID())
 | 
			
		||||
			// a.SetStreamID(a.streamID())
 | 
			
		||||
		default:
 | 
			
		||||
			log.Printf("unknown event %T", e)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *SaltyUser) streamID() string {
 | 
			
		||||
	return fmt.Sprintf("saltyuser-%x", sha256.Sum256([]byte(strings.ToLower(a.name))))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *SaltyUser) OnUserRegister(name string, pubkey *keys.EdX25519PublicKey) error {
 | 
			
		||||
func (a *SaltyUser) OnUserRegister(pubkey *keys.EdX25519PublicKey) error {
 | 
			
		||||
	if err := event.NotExists(a); err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	event.Raise(a, &UserRegistered{Name: name, Pubkey: pubkey})
 | 
			
		||||
	event.Raise(a, &UserRegistered{Pubkey: pubkey})
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (a *SaltyUser) Nick() string   { return a.name }
 | 
			
		||||
func (a *SaltyUser) Inbox() string  { return a.inbox.String() }
 | 
			
		||||
func (a *SaltyUser) Pubkey() string { return a.pubkey.String() }
 | 
			
		||||
func (s *SaltyUser) Endpoint(ctx context.Context) (string, error) {
 | 
			
		||||
 | 
			
		||||
@ -7,7 +7,6 @@ extend type Mutation {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type SaltyUser @goModel(model: "github.com/sour-is/ev/app/salty.SaltyUser"){
 | 
			
		||||
    nick:     String!
 | 
			
		||||
    pubkey:   String!
 | 
			
		||||
    inbox:    String!
 | 
			
		||||
    endpoint: String!
 | 
			
		||||
 | 
			
		||||
@ -177,9 +177,9 @@ func (s *service) CreateSaltyUser(ctx context.Context, nick string, pub string)
 | 
			
		||||
	streamID := NickToStreamID(nick)
 | 
			
		||||
	span.AddEvent(streamID)
 | 
			
		||||
 | 
			
		||||
	return s.createSaltyUser(ctx, nick, streamID, pub)
 | 
			
		||||
	return s.createSaltyUser(ctx, streamID, pub)
 | 
			
		||||
}
 | 
			
		||||
func (s *service) createSaltyUser(ctx context.Context, nick, streamID, pub string) (*SaltyUser, error) {
 | 
			
		||||
func (s *service) createSaltyUser(ctx context.Context, streamID, pub string) (*SaltyUser, error) {
 | 
			
		||||
	ctx, span := lg.Span(ctx)
 | 
			
		||||
	defer span.End()
 | 
			
		||||
 | 
			
		||||
@ -190,16 +190,16 @@ func (s *service) createSaltyUser(ctx context.Context, nick, streamID, pub strin
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a, err := es.Create(ctx, s.es, streamID, func(ctx context.Context, agg *SaltyUser) error {
 | 
			
		||||
		return agg.OnUserRegister(nick, key)
 | 
			
		||||
		return agg.OnUserRegister(key)
 | 
			
		||||
	})
 | 
			
		||||
	switch {
 | 
			
		||||
	case errors.Is(err, es.ErrShouldNotExist):
 | 
			
		||||
		span.RecordError(err)
 | 
			
		||||
		return nil, fmt.Errorf("user exists")
 | 
			
		||||
		return nil, fmt.Errorf("user exists: %w", err)
 | 
			
		||||
 | 
			
		||||
	case err != nil:
 | 
			
		||||
		span.RecordError(err)
 | 
			
		||||
		return nil, fmt.Errorf("internal error")
 | 
			
		||||
		return nil, fmt.Errorf("internal error: %w", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return a, nil
 | 
			
		||||
@ -296,14 +296,15 @@ func (s *service) apiv1(w http.ResponseWriter, r *http.Request) {
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			_, err = s.createSaltyUser(ctx, "", HashToStreamID(req.Hash), req.Key)
 | 
			
		||||
			_, err = s.createSaltyUser(ctx, HashToStreamID(req.Hash), req.Key)
 | 
			
		||||
			if errors.Is(err, event.ErrShouldNotExist) {
 | 
			
		||||
				http.Error(w, "Already Exists", http.StatusConflict)
 | 
			
		||||
				return
 | 
			
		||||
			} else if err != nil {
 | 
			
		||||
				http.Error(w, "Error", http.StatusInternalServerError)
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			http.Error(w, "Endpoint Created", http.StatusCreated)
 | 
			
		||||
			return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								go.sum
									
									
									
									
									
								
							@ -58,6 +58,7 @@ github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0 h1:jfIu9sQUG6Ig
 | 
			
		||||
github.com/arbovm/levenshtein v0.0.0-20160628152529-48b4e1c0c4d0/go.mod h1:t2tdKJDJF9BV14lnkjHmOQgcvEKgtqs5a1N3LNdJhGE=
 | 
			
		||||
github.com/avast/retry-go v2.7.0+incompatible h1:XaGnzl7gESAideSjr+I8Hki/JBi+Yb9baHlMRPeSC84=
 | 
			
		||||
github.com/avast/retry-go v2.7.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
 | 
			
		||||
github.com/badgerodon/ioutil v0.0.0-20150716134133-06e58e34b867 h1:nsDNoesoGwPzPkcrR1w1uzPUtiqwCXoNnkWC7nUuRHI=
 | 
			
		||||
github.com/badgerodon/ioutil v0.0.0-20150716134133-06e58e34b867/go.mod h1:Ctq1YQi0dOq7QgBLZZ7p1Fr3IbAAqL/yMqDIHoe9WtE=
 | 
			
		||||
github.com/beeker1121/goque v2.1.0+incompatible h1:m5pZ5b8nqzojS2DF2ioZphFYQUqGYsDORq6uefUItPM=
 | 
			
		||||
github.com/beeker1121/goque v2.1.0+incompatible/go.mod h1:L6dOWBhDOnxUVQsb0wkLve0VCnt2xJW/MI8pdRX4ANw=
 | 
			
		||||
@ -111,10 +112,12 @@ github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBd
 | 
			
		||||
github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 | 
			
		||||
github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 | 
			
		||||
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
 | 
			
		||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 | 
			
		||||
github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
 | 
			
		||||
github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
 | 
			
		||||
github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14=
 | 
			
		||||
github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M=
 | 
			
		||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 | 
			
		||||
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 | 
			
		||||
@ -135,12 +138,18 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
 | 
			
		||||
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
 | 
			
		||||
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
 | 
			
		||||
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
 | 
			
		||||
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
 | 
			
		||||
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
 | 
			
		||||
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
 | 
			
		||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY=
 | 
			
		||||
github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI=
 | 
			
		||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 | 
			
		||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
 | 
			
		||||
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
 | 
			
		||||
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
 | 
			
		||||
github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
 | 
			
		||||
github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo=
 | 
			
		||||
github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM=
 | 
			
		||||
github.com/godbus/dbus v4.1.0+incompatible/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
 | 
			
		||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 | 
			
		||||
@ -230,6 +239,7 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV
 | 
			
		||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 | 
			
		||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 | 
			
		||||
github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
 | 
			
		||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 | 
			
		||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
 | 
			
		||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
 | 
			
		||||
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 | 
			
		||||
@ -240,7 +250,6 @@ github.com/keybase/go-codec v0.0.0-20180928230036-164397562123 h1:yg56lYPqh9suJe
 | 
			
		||||
github.com/keybase/go-codec v0.0.0-20180928230036-164397562123/go.mod h1:r/eVVWCngg6TsFV/3HuS9sWhDkAzGG8mXhiuYA+Z/20=
 | 
			
		||||
github.com/keybase/go-keychain v0.0.0-20201121013009-976c83ec27a6/go.mod h1:N83iQ9rnnzi2KZuTu+0xBcD1JNWn1jSN140ggAF7HeE=
 | 
			
		||||
github.com/keybase/go.dbus v0.0.0-20200324223359-a94be52c0b03/go.mod h1:a8clEhrrGV/d76/f9r2I41BwANMihfZYV9C223vaxqE=
 | 
			
		||||
github.com/keybase/saltpack v0.0.0-20200430135328-e19b1910c0c5 h1:X6nYzCVURqxDv0GuyptaCcRFTXPM0rSGNUrTeQ2NKUQ=
 | 
			
		||||
github.com/keybase/saltpack v0.0.0-20200430135328-e19b1910c0c5/go.mod h1:FNSq71OhXv/Z1W9M37nnHxJVhXitc03z6qshCbAten8=
 | 
			
		||||
github.com/keybase/saltpack v0.0.0-20211122193250-350028a91799 h1:k8xxc5cXxOqKApgrCvxKc7oaoyAPgsJSXwDEh7mvLfI=
 | 
			
		||||
github.com/keybase/saltpack v0.0.0-20211122193250-350028a91799/go.mod h1:8hM5WwVH+oXJVaxqscISOuOjPHV20Htnl56CBLAPzMY=
 | 
			
		||||
@ -255,13 +264,14 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv
 | 
			
		||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 | 
			
		||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
 | 
			
		||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 | 
			
		||||
github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI=
 | 
			
		||||
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 | 
			
		||||
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
 | 
			
		||||
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
 | 
			
		||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
 | 
			
		||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 | 
			
		||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
 | 
			
		||||
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
 | 
			
		||||
github.com/likexian/doh-go v0.6.4 h1:UnTrIVAOwkBvKU6qOt2W3C5yC9/YO02UVPPcN26iZDY=
 | 
			
		||||
github.com/likexian/doh-go v0.6.4/go.mod h1:9jHpL/WPYmOM8+93RwXDf5TpZZwQjHrmIglXmjHpLlA=
 | 
			
		||||
@ -279,6 +289,7 @@ github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwM
 | 
			
		||||
github.com/matryer/moq v0.2.7/go.mod h1:kITsx543GOENm48TUAQyJ9+SAvFSr7iGQXPoth/VUBk=
 | 
			
		||||
github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
 | 
			
		||||
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 | 
			
		||||
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 | 
			
		||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
 | 
			
		||||
@ -287,9 +298,11 @@ github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
 | 
			
		||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
 | 
			
		||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
 | 
			
		||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 | 
			
		||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 | 
			
		||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 | 
			
		||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 | 
			
		||||
@ -339,7 +352,6 @@ github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T
 | 
			
		||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 | 
			
		||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
 | 
			
		||||
github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
 | 
			
		||||
github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4=
 | 
			
		||||
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
 | 
			
		||||
github.com/prometheus/common v0.33.0 h1:rHgav/0a6+uYgGdNt3jwz8FNSesO/Hsang3O0T9A5SE=
 | 
			
		||||
github.com/prometheus/common v0.33.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE=
 | 
			
		||||
@ -354,6 +366,7 @@ github.com/ravilushqa/otelgqlgen v0.9.0/go.mod h1:TqSvbt/7E23CHOOgL6G+42kCbhvxUp
 | 
			
		||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8=
 | 
			
		||||
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
 | 
			
		||||
github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U=
 | 
			
		||||
github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
 | 
			
		||||
@ -383,7 +396,6 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 | 
			
		||||
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
 | 
			
		||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
 | 
			
		||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
 | 
			
		||||
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
 | 
			
		||||
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 | 
			
		||||
github.com/tidwall/gjson v1.14.0 h1:6aeJ0bzojgWLa82gDQHcx3S0Lr/O51I9bJ5nv6JFx5w=
 | 
			
		||||
github.com/tidwall/gjson v1.14.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
 | 
			
		||||
@ -401,7 +413,9 @@ github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYa
 | 
			
		||||
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
 | 
			
		||||
github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8=
 | 
			
		||||
github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U=
 | 
			
		||||
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
 | 
			
		||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
 | 
			
		||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
 | 
			
		||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
 | 
			
		||||
github.com/urfave/cli/v2 v2.8.1/go.mod h1:Z41J9TPoffeoqP0Iza0YbAhGvymRdZAd2uPmZ5JxRdY=
 | 
			
		||||
github.com/vektah/gqlparser/v2 v2.4.6/go.mod h1:flJWIR04IMQPGz+BXLrORkrARBxv/rtyIAFvd/MceW0=
 | 
			
		||||
@ -482,7 +496,6 @@ golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPh
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200427165652-729f1e841bcc/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 | 
			
		||||
golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 h1:S25/rfnfsMVgORT4/J61MJ7rdyseOZOyvLIrZEZ7s6s=
 | 
			
		||||
@ -556,7 +569,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
 | 
			
		||||
golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
 | 
			
		||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 | 
			
		||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 | 
			
		||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
 | 
			
		||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 | 
			
		||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 | 
			
		||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 | 
			
		||||
@ -640,13 +652,11 @@ golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBc
 | 
			
		||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64 h1:D1v9ucDTYBtbz5vNuBbAhIMAGhQhJ6Ym5ah3maMVNX4=
 | 
			
		||||
golang.org/x/sys v0.0.0-20220405052023-b1e9470b6e64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
			
		||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
			
		||||
golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 h1:EC6+IGYTjPpRfv9a2b/6Puw0W+hLtAhkV1tPsXhutqs=
 | 
			
		||||
golang.org/x/term v0.0.0-20210317153231-de623e64d2a6/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
			
		||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
 | 
			
		||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
			
		||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								gqlgen.yml
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								gqlgen.yml
									
									
									
									
									
								
							@ -1,48 +1,19 @@
 | 
			
		||||
# Where are all the schema files located? globs are supported eg  src/**/*.graphqls
 | 
			
		||||
schema:
 | 
			
		||||
  - pkg/*/*.graphqls
 | 
			
		||||
  - app/*/*.graphqls
 | 
			
		||||
 | 
			
		||||
# Where should the generated server code go?
 | 
			
		||||
exec:
 | 
			
		||||
  filename: internal/graph/generated/generated.go
 | 
			
		||||
  package: generated
 | 
			
		||||
 | 
			
		||||
# Uncomment to enable federation
 | 
			
		||||
federation:
 | 
			
		||||
  filename: internal/graph/generated/federation.go
 | 
			
		||||
  package: generated
 | 
			
		||||
 | 
			
		||||
# Where should any generated models go?
 | 
			
		||||
model:
 | 
			
		||||
  filename: internal/graph/model/models_gen.go
 | 
			
		||||
  package: model
 | 
			
		||||
 | 
			
		||||
# Where should the resolver implementations go?
 | 
			
		||||
# resolver:
 | 
			
		||||
#   layout: follow-schema
 | 
			
		||||
#   dir: internal/graph
 | 
			
		||||
#   package: graph
 | 
			
		||||
 | 
			
		||||
# Optional: turn on use `gqlgen:"fieldName"` tags in your models
 | 
			
		||||
# struct_tag: json
 | 
			
		||||
 | 
			
		||||
# Optional: turn on to use []Thing instead of []*Thing
 | 
			
		||||
# omit_slice_element_pointers: false
 | 
			
		||||
 | 
			
		||||
# Optional: set to speed up generation time by not performing a final validation pass.
 | 
			
		||||
# skip_validation: true
 | 
			
		||||
 | 
			
		||||
# gqlgen will search for any type names in the schema in these go packages
 | 
			
		||||
# if they match it will use them, otherwise it will generate them.
 | 
			
		||||
# autobind:
 | 
			
		||||
#   - "github.com/sour-is/ev/pkg/gql"
 | 
			
		||||
 | 
			
		||||
# This section declares type mapping between the GraphQL and go type systems
 | 
			
		||||
#
 | 
			
		||||
# The first line in each type will be used as defaults for resolver arguments and
 | 
			
		||||
# modelgen, the others will be allowed when binding to fields. Configure them to
 | 
			
		||||
# your liking
 | 
			
		||||
models:
 | 
			
		||||
  ID:
 | 
			
		||||
    model:
 | 
			
		||||
 | 
			
		||||
@ -101,7 +101,6 @@ type ComplexityRoot struct {
 | 
			
		||||
	SaltyUser struct {
 | 
			
		||||
		Endpoint func(childComplexity int) int
 | 
			
		||||
		Inbox    func(childComplexity int) int
 | 
			
		||||
		Nick     func(childComplexity int) int
 | 
			
		||||
		Pubkey   func(childComplexity int) int
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -352,13 +351,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
 | 
			
		||||
 | 
			
		||||
		return e.complexity.SaltyUser.Inbox(childComplexity), true
 | 
			
		||||
 | 
			
		||||
	case "SaltyUser.nick":
 | 
			
		||||
		if e.complexity.SaltyUser.Nick == nil {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return e.complexity.SaltyUser.Nick(childComplexity), true
 | 
			
		||||
 | 
			
		||||
	case "SaltyUser.pubkey":
 | 
			
		||||
		if e.complexity.SaltyUser.Pubkey == nil {
 | 
			
		||||
			break
 | 
			
		||||
@ -568,7 +560,6 @@ extend type Mutation {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type SaltyUser @goModel(model: "github.com/sour-is/ev/app/salty.SaltyUser"){
 | 
			
		||||
    nick:     String!
 | 
			
		||||
    pubkey:   String!
 | 
			
		||||
    inbox:    String!
 | 
			
		||||
    endpoint: String!
 | 
			
		||||
@ -1328,8 +1319,6 @@ func (ec *executionContext) fieldContext_Mutation_createSaltyUser(ctx context.Co
 | 
			
		||||
		IsResolver: true,
 | 
			
		||||
		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 | 
			
		||||
			switch field.Name {
 | 
			
		||||
			case "nick":
 | 
			
		||||
				return ec.fieldContext_SaltyUser_nick(ctx, field)
 | 
			
		||||
			case "pubkey":
 | 
			
		||||
				return ec.fieldContext_SaltyUser_pubkey(ctx, field)
 | 
			
		||||
			case "inbox":
 | 
			
		||||
@ -1918,8 +1907,6 @@ func (ec *executionContext) fieldContext_Query_saltyUser(ctx context.Context, fi
 | 
			
		||||
		IsResolver: true,
 | 
			
		||||
		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 | 
			
		||||
			switch field.Name {
 | 
			
		||||
			case "nick":
 | 
			
		||||
				return ec.fieldContext_SaltyUser_nick(ctx, field)
 | 
			
		||||
			case "pubkey":
 | 
			
		||||
				return ec.fieldContext_SaltyUser_pubkey(ctx, field)
 | 
			
		||||
			case "inbox":
 | 
			
		||||
@ -2121,50 +2108,6 @@ func (ec *executionContext) fieldContext_Query___schema(ctx context.Context, fie
 | 
			
		||||
	return fc, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ec *executionContext) _SaltyUser_nick(ctx context.Context, field graphql.CollectedField, obj *salty.SaltyUser) (ret graphql.Marshaler) {
 | 
			
		||||
	fc, err := ec.fieldContext_SaltyUser_nick(ctx, field)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return graphql.Null
 | 
			
		||||
	}
 | 
			
		||||
	ctx = graphql.WithFieldContext(ctx, fc)
 | 
			
		||||
	defer func() {
 | 
			
		||||
		if r := recover(); r != nil {
 | 
			
		||||
			ec.Error(ctx, ec.Recover(ctx, r))
 | 
			
		||||
			ret = graphql.Null
 | 
			
		||||
		}
 | 
			
		||||
	}()
 | 
			
		||||
	resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
 | 
			
		||||
		ctx = rctx // use context from middleware stack in children
 | 
			
		||||
		return obj.Nick(), nil
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		ec.Error(ctx, err)
 | 
			
		||||
		return graphql.Null
 | 
			
		||||
	}
 | 
			
		||||
	if resTmp == nil {
 | 
			
		||||
		if !graphql.HasFieldError(ctx, fc) {
 | 
			
		||||
			ec.Errorf(ctx, "must not be null")
 | 
			
		||||
		}
 | 
			
		||||
		return graphql.Null
 | 
			
		||||
	}
 | 
			
		||||
	res := resTmp.(string)
 | 
			
		||||
	fc.Result = res
 | 
			
		||||
	return ec.marshalNString2string(ctx, field.Selections, res)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ec *executionContext) fieldContext_SaltyUser_nick(ctx context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
 | 
			
		||||
	fc = &graphql.FieldContext{
 | 
			
		||||
		Object:     "SaltyUser",
 | 
			
		||||
		Field:      field,
 | 
			
		||||
		IsMethod:   true,
 | 
			
		||||
		IsResolver: false,
 | 
			
		||||
		Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
 | 
			
		||||
			return nil, errors.New("field of type String does not have child fields")
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	return fc, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (ec *executionContext) _SaltyUser_pubkey(ctx context.Context, field graphql.CollectedField, obj *salty.SaltyUser) (ret graphql.Marshaler) {
 | 
			
		||||
	fc, err := ec.fieldContext_SaltyUser_pubkey(ctx, field)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -4772,13 +4715,6 @@ func (ec *executionContext) _SaltyUser(ctx context.Context, sel ast.SelectionSet
 | 
			
		||||
		switch field.Name {
 | 
			
		||||
		case "__typename":
 | 
			
		||||
			out.Values[i] = graphql.MarshalString("SaltyUser")
 | 
			
		||||
		case "nick":
 | 
			
		||||
 | 
			
		||||
			out.Values[i] = ec._SaltyUser_nick(ctx, field, obj)
 | 
			
		||||
 | 
			
		||||
			if out.Values[i] == graphql.Null {
 | 
			
		||||
				atomic.AddUint32(&invalids, 1)
 | 
			
		||||
			}
 | 
			
		||||
		case "pubkey":
 | 
			
		||||
 | 
			
		||||
			out.Values[i] = ec._SaltyUser_pubkey(ctx, field, obj)
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
// package diskstore provides a driver that reads and writes events to disk. 
 | 
			
		||||
// package diskstore provides a driver that reads and writes events to disk.
 | 
			
		||||
 | 
			
		||||
package diskstore
 | 
			
		||||
 | 
			
		||||
@ -176,7 +176,9 @@ func (e *eventLog) Append(ctx context.Context, events event.Events, version uint
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if version != AppendOnly && version != last {
 | 
			
		||||
			return fmt.Errorf("%w: current version wrong %d != %d", es.ErrWrongVersion, version, last)
 | 
			
		||||
			err = fmt.Errorf("%w: current version wrong %d != %d", es.ErrWrongVersion, version, last)
 | 
			
		||||
			span.RecordError(err)
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		var b []byte
 | 
			
		||||
@ -202,6 +204,7 @@ func (e *eventLog) Append(ctx context.Context, events event.Events, version uint
 | 
			
		||||
 | 
			
		||||
		return l.WriteBatch(batch)
 | 
			
		||||
	})
 | 
			
		||||
	span.RecordError(err)
 | 
			
		||||
 | 
			
		||||
	return count, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										32
									
								
								pkg/es/es.go
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								pkg/es/es.go
									
									
									
									
									
								
							@ -11,6 +11,7 @@ import (
 | 
			
		||||
	"github.com/sour-is/ev/pkg/es/driver"
 | 
			
		||||
	"github.com/sour-is/ev/pkg/es/event"
 | 
			
		||||
	"github.com/sour-is/ev/pkg/locker"
 | 
			
		||||
	"go.opentelemetry.io/otel/attribute"
 | 
			
		||||
	"go.opentelemetry.io/otel/metric/instrument/syncint64"
 | 
			
		||||
	"go.uber.org/multierr"
 | 
			
		||||
)
 | 
			
		||||
@ -77,6 +78,8 @@ func Open(ctx context.Context, dsn string, options ...Option) (*EventStore, erro
 | 
			
		||||
	ctx, span := lg.Span(ctx)
 | 
			
		||||
	defer span.End()
 | 
			
		||||
 | 
			
		||||
	span.SetAttributes(attribute.String("dsn", dsn))
 | 
			
		||||
 | 
			
		||||
	name, _, ok := strings.Cut(dsn, ":")
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return nil, fmt.Errorf("%w: no scheme", ErrNoDriver)
 | 
			
		||||
@ -119,6 +122,11 @@ func (es *EventStore) Save(ctx context.Context, agg event.Aggregate) (uint64, er
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	Mes_save.Add(ctx, 1)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("agg.type", event.TypeOf(agg)),
 | 
			
		||||
		attribute.String("agg.streamID", agg.StreamID()),
 | 
			
		||||
		attribute.Int64("agg.version", int64(agg.StreamVersion())),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	l, err := es.EventLog(ctx, agg.StreamID())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -139,6 +147,11 @@ func (es *EventStore) Load(ctx context.Context, agg event.Aggregate) error {
 | 
			
		||||
 | 
			
		||||
	Mes_load.Add(ctx, 1)
 | 
			
		||||
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("agg.type", event.TypeOf(agg)),
 | 
			
		||||
		attribute.String("agg.streamID", agg.StreamID()),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	l, err := es.Driver.EventLog(ctx, agg.StreamID())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return err
 | 
			
		||||
@ -151,6 +164,10 @@ func (es *EventStore) Load(ctx context.Context, agg event.Aggregate) error {
 | 
			
		||||
 | 
			
		||||
	event.Append(agg, events...)
 | 
			
		||||
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.Int64("agg.version", int64(agg.StreamVersion())),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
func (es *EventStore) Read(ctx context.Context, streamID string, pos, count int64) (event.Events, error) {
 | 
			
		||||
@ -158,6 +175,9 @@ func (es *EventStore) Read(ctx context.Context, streamID string, pos, count int6
 | 
			
		||||
	defer span.End()
 | 
			
		||||
 | 
			
		||||
	Mes_read.Add(ctx, 1)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("ev.streamID", streamID),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	l, err := es.Driver.EventLog(ctx, streamID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -170,6 +190,9 @@ func (es *EventStore) Append(ctx context.Context, streamID string, events event.
 | 
			
		||||
	defer span.End()
 | 
			
		||||
 | 
			
		||||
	Mes_append.Add(ctx, 1)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("ev.streamID", streamID),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	l, err := es.Driver.EventLog(ctx, streamID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -242,6 +265,9 @@ func Create[A any, T PA[A]](ctx context.Context, es *EventStore, streamID string
 | 
			
		||||
 | 
			
		||||
	agg = new(A)
 | 
			
		||||
	agg.SetStreamID(streamID)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("agg.streamID", streamID),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if err = es.Load(ctx, agg); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
@ -272,6 +298,9 @@ func Update[A any, T PA[A]](ctx context.Context, es *EventStore, streamID string
 | 
			
		||||
 | 
			
		||||
	agg = new(A)
 | 
			
		||||
	agg.SetStreamID(streamID)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("agg.streamID", streamID),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if err = es.Load(ctx, agg); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
@ -299,6 +328,9 @@ func Upsert[A any, T PA[A]](ctx context.Context, es *EventStore, streamID string
 | 
			
		||||
 | 
			
		||||
	agg = new(A)
 | 
			
		||||
	agg.SetStreamID(streamID)
 | 
			
		||||
	span.SetAttributes(
 | 
			
		||||
		attribute.String("agg.streamID", streamID),
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	if err = es.Load(ctx, agg); err != nil {
 | 
			
		||||
		return
 | 
			
		||||
 | 
			
		||||
@ -79,7 +79,7 @@ func (lis Events) Last() Event {
 | 
			
		||||
	return lis[len(lis)-1]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TypeOf(e Event) string {
 | 
			
		||||
func TypeOf(e any) string {
 | 
			
		||||
	if ie, ok := e.(interface{ UnwrapEvent() Event }); ok {
 | 
			
		||||
		e = ie.UnwrapEvent()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user