diff --git a/api/v1/accounts/lookup/handler.go b/api/v1/accounts/lookup/handler.go new file mode 100644 index 0000000..49dbe4f --- /dev/null +++ b/api/v1/accounts/lookup/handler.go @@ -0,0 +1,78 @@ +package lookup + +import ( + "net/http" + + "sourcecode.social/reiver/go-mstdn" + "sourcecode.social/reiver/go-mstdn/ent" +) + +var _ http.Handler = Handler{} + +const Path string = "/api/v1/accounts/lookup" + +type Handler struct { + LoaderFunc LoaderFunc +} + +func (Handler) Path() string { + return Path +} + +func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { + if nil == resp { + return + } + + if nil == req { + mstdn.InternalServerError(resp) + return + } + + if http.MethodGet != req.Method { + mstdn.MethodNotAllowed(resp) + return + } + + fn := receiver.LoaderFunc + if nil == fn { + mstdn.InternalServerError(resp) + return + } + + var acct string + { + const key string = "acct" + + url := req.URL + if nil == url { + mstdn.InternalServerError(resp) + return + } + + query := url.Query() + if nil == query { + mstdn.InternalServerError(resp) + return + } + + if !query.Has(key) { + mstdn.BadRequest(resp) + return + } + + acct = query.Get("acct") + } + + var account ent.Account + { + + err := fn(&account, acct) + if nil != err { + mstdn.Error(resp, err.ErrHTTP()) + return + } + } + + mstdn.OK(resp, account) +} diff --git a/api/v1/accounts/lookup/loader.go b/api/v1/accounts/lookup/loader.go new file mode 100644 index 0000000..732ae4d --- /dev/null +++ b/api/v1/accounts/lookup/loader.go @@ -0,0 +1,8 @@ +package lookup + +import ( + "sourcecode.social/reiver/go-mstdn/api/v1" + "sourcecode.social/reiver/go-mstdn/ent" +) + +type LoaderFunc func(account *ent.Account, acct string) v1.Error