diff --git a/cmd/crossposting-service/di/inject_adapters.go b/cmd/crossposting-service/di/inject_adapters.go
index 767135b..ff1a388 100644
--- a/cmd/crossposting-service/di/inject_adapters.go
+++ b/cmd/crossposting-service/di/inject_adapters.go
@@ -72,8 +72,11 @@ var adaptersSet = wire.NewSet(
wire.Bind(new(app.RelayEventDownloader), new(*adapters.RelayEventDownloader)),
twitter.NewTwitter,
- twitter.NewNoopOnWriteTwitter,
+ twitter.NewDevelopmentTwitter,
selectTwitterAdapterDependingOnConfig,
+
+ adapters.NewTwitterAccountDetailsCache,
+ wire.Bind(new(app.TwitterAccountDetailsCache), new(*adapters.TwitterAccountDetailsCache)),
)
func newAdaptersFactoryFn(deps buildTransactionSqliteAdaptersDependencies) sqlite.AdaptersFactoryFn {
@@ -104,7 +107,7 @@ func newSqliteDB(conf config.Config, logger logging.Logger) (*sql.DB, func(), er
func selectTwitterAdapterDependingOnConfig(
conf config.Config,
productionAdapter *twitter.Twitter,
- developmentAdapter *twitter.NoopOnWriteTwitter,
+ developmentAdapter *twitter.DevelopmentTwitter,
) app.Twitter {
if conf.Environment() == config.EnvironmentDevelopment {
return developmentAdapter
diff --git a/cmd/crossposting-service/di/wire_gen.go b/cmd/crossposting-service/di/wire_gen.go
index 7d02a8f..bb2566d 100644
--- a/cmd/crossposting-service/di/wire_gen.go
+++ b/cmd/crossposting-service/di/wire_gen.go
@@ -54,9 +54,10 @@ func BuildService(contextContext context.Context, configConfig config.Config) (S
getSessionAccountHandler := app.NewGetSessionAccountHandler(genericTransactionProvider, logger, prometheusPrometheus)
getAccountPublicKeysHandler := app.NewGetAccountPublicKeysHandler(genericTransactionProvider, logger, prometheusPrometheus)
twitterTwitter := twitter.NewTwitter(configConfig, logger, prometheusPrometheus)
- noopOnWriteTwitter := twitter.NewNoopOnWriteTwitter(twitterTwitter, logger)
- appTwitter := selectTwitterAdapterDependingOnConfig(configConfig, twitterTwitter, noopOnWriteTwitter)
- getTwitterAccountDetailsHandler := app.NewGetTwitterAccountDetailsHandler(genericTransactionProvider, appTwitter, logger, prometheusPrometheus)
+ developmentTwitter := twitter.NewDevelopmentTwitter(logger)
+ appTwitter := selectTwitterAdapterDependingOnConfig(configConfig, twitterTwitter, developmentTwitter)
+ twitterAccountDetailsCache := adapters.NewTwitterAccountDetailsCache()
+ getTwitterAccountDetailsHandler := app.NewGetTwitterAccountDetailsHandler(genericTransactionProvider, appTwitter, twitterAccountDetailsCache, logger, prometheusPrometheus)
idGenerator := adapters.NewIDGenerator()
loginOrRegisterHandler := app.NewLoginOrRegisterHandler(genericTransactionProvider, idGenerator, idGenerator, logger, prometheusPrometheus)
linkPublicKeyHandler := app.NewLinkPublicKeyHandler(genericTransactionProvider, logger, prometheusPrometheus)
diff --git a/frontend/nos-crossposting-service-frontend/src/components/Button.vue b/frontend/nos-crossposting-service-frontend/src/components/Button.vue
new file mode 100644
index 0000000..49875db
--- /dev/null
+++ b/frontend/nos-crossposting-service-frontend/src/components/Button.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
diff --git a/frontend/nos-crossposting-service-frontend/src/components/Checkmark.vue b/frontend/nos-crossposting-service-frontend/src/components/Checkmark.vue
new file mode 100644
index 0000000..62efc39
--- /dev/null
+++ b/frontend/nos-crossposting-service-frontend/src/components/Checkmark.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/frontend/nos-crossposting-service-frontend/src/components/CurrentUser.vue b/frontend/nos-crossposting-service-frontend/src/components/CurrentUser.vue
index c1e6c18..020cb75 100644
--- a/frontend/nos-crossposting-service-frontend/src/components/CurrentUser.vue
+++ b/frontend/nos-crossposting-service-frontend/src/components/CurrentUser.vue
@@ -8,15 +8,17 @@
-
+
- You haven't added any public keys yet. -
-f?X(t,i,s,!0,!1,p):T(e,n,r,i,s,c,a,u,p)},H=(t,e,n,r,i,s,c,a,u)=>{let l=0;const f=e.length;let p=t.length-1,d=f-1;while(l<=p&&l<=d){const r=t[l],o=e[l]=u?an(e[l]):cn(e[l]);if(!Ke(r,o))break;v(r,o,n,null,i,s,c,a,u),l++}while(l<=p&&l<=d){const r=t[p],o=e[d]=u?an(e[d]):cn(e[d]);if(!Ke(r,o))break;v(r,o,n,null,i,s,c,a,u),p--,d--}if(l>p){if(l<=d){const t=d+1,o=t