/v1/accounts/look /v1/accounts/{account_id}

master
Charles Iliya Krempeaux 2023-10-01 18:26:22 +09:00
parent a3b2417013
commit 116a2fe687
4 changed files with 86 additions and 22 deletions

View File

@ -3,23 +3,33 @@ package account_id
import ( import (
"net/http" "net/http"
"sourcecode.social/reiver/go-pathmatch"
"sourcecode.social/reiver/go-mstdn" "sourcecode.social/reiver/go-mstdn"
"sourcecode.social/reiver/go-mstdn/ent" "sourcecode.social/reiver/go-mstdn/ent"
) )
var _ http.Handler = Handler{} var _ http.Handler = internalHandler{}
const Path string = "/api/v1/accounts/{account_id}" const Path string = "/api/v1/accounts/{account_id}"
type Handler struct { var pattern *pathmatch.Pattern = pathmatch.MustCompile(Path)
LoaderFunc LoaderFunc
func Handler(fn LoaderFunc) http.Handler {
return internalHandler{
loaderFunc:fn,
}
} }
func (Handler) Path() string { type internalHandler struct {
loaderFunc LoaderFunc
}
func (internalHandler) Path() string {
return Path return Path
} }
func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { func (receiver internalHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
if nil == resp { if nil == resp {
return return
} }
@ -34,7 +44,7 @@ func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
return return
} }
fn := receiver.LoaderFunc fn := receiver.loaderFunc
if nil == fn { if nil == fn {
mstdn.InternalServerError(resp) mstdn.InternalServerError(resp)
return return
@ -42,26 +52,23 @@ func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
var accountid string var accountid string
{ {
const key string = "accountid"
url := req.URL url := req.URL
if nil == url { if nil == url {
mstdn.InternalServerError(resp) mstdn.InternalServerError(resp)
return return
} }
query := url.Query() path := url.Path
if nil == query {
mstdn.InternalServerError(resp)
return
}
if !query.Has(key) { success, err := pattern.Find(path, &accountid)
if nil != err {
mstdn.BadRequest(resp)
return
}
if !success {
mstdn.BadRequest(resp) mstdn.BadRequest(resp)
return return
} }
accountid = query.Get("accountid")
} }
var account ent.Account var account ent.Account

View File

@ -7,19 +7,25 @@ import (
"sourcecode.social/reiver/go-mstdn/ent" "sourcecode.social/reiver/go-mstdn/ent"
) )
var _ http.Handler = Handler{} var _ http.Handler = internalHandler{}
const Path string = "/api/v1/accounts/lookup" const Path string = "/api/v1/accounts/lookup"
type Handler struct { func Handler(fn LoaderFunc) http.Handler {
LoaderFunc LoaderFunc return internalHandler{
loaderFunc:fn,
}
} }
func (Handler) Path() string { type internalHandler struct {
loaderFunc LoaderFunc
}
func (internalHandler) Path() string {
return Path return Path
} }
func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { func (receiver internalHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
if nil == resp { if nil == resp {
return return
} }
@ -34,7 +40,7 @@ func (receiver Handler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
return return
} }
fn := receiver.LoaderFunc fn := receiver.loaderFunc
if nil == fn { if nil == fn {
mstdn.InternalServerError(resp) mstdn.InternalServerError(resp)
return return

13
go.mod 100644
View File

@ -0,0 +1,13 @@
module sourcecode.social/reiver/go-mstdn
go 1.20
require (
sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1 // indirect
sourcecode.social/reiver/go-jsonint v0.0.0-20230924212905-09e0626e3dd8 // indirect
sourcecode.social/reiver/go-jsonpp v0.0.0-20230927044614-2bd26d25b35e // indirect
sourcecode.social/reiver/go-jsonstr v0.0.0-20230927032837-cca9187c9798 // indirect
sourcecode.social/reiver/go-nul v0.0.0-20230927004815-8a8eeb3194fa // indirect
sourcecode.social/reiver/go-opt v0.0.0-20230927004316-272fd8451811 // indirect
sourcecode.social/reiver/go-pathmatch v0.0.0-20231001044920-1772a36eb6bd // indirect
)

38
go.sum 100644
View File

@ -0,0 +1,38 @@
sourcecode.social/reiver/go-erorr v0.0.0-20230922194705-6dcd8d352220 h1:SOCgtgGppEFZZZNKMSMhALmtT9FD1ChUzS5JFlhNhBc=
sourcecode.social/reiver/go-erorr v0.0.0-20230922194705-6dcd8d352220/go.mod h1:NFtd7fzEf0r6A6R7JXYZfayRhPaJy0zt/18VWoLzrxA=
sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1 h1:wpnz4JicQBLWrgGphYBls7DysIFCcnWgDz/vce/sY8E=
sourcecode.social/reiver/go-erorr v0.0.0-20230922202459-231149d185a1/go.mod h1:NFtd7fzEf0r6A6R7JXYZfayRhPaJy0zt/18VWoLzrxA=
sourcecode.social/reiver/go-jsonint v0.0.0-20230924185016-b499a1e14425 h1:3hEByqgGPWYmh89OAuYA6k4rdkTF7fobPgHAjQOzoq4=
sourcecode.social/reiver/go-jsonint v0.0.0-20230924185016-b499a1e14425/go.mod h1:PpaukJtakk0O45CurQVADzvpu4/2y0n1tc0j1dG1bVw=
sourcecode.social/reiver/go-jsonint v0.0.0-20230924212905-09e0626e3dd8 h1:Qf3OP8Z89a6t4M6qwF7q4+DYhU93rPFPJ1sl+bxesME=
sourcecode.social/reiver/go-jsonint v0.0.0-20230924212905-09e0626e3dd8/go.mod h1:PpaukJtakk0O45CurQVADzvpu4/2y0n1tc0j1dG1bVw=
sourcecode.social/reiver/go-jsonpp v0.0.0-20230927044614-2bd26d25b35e h1:hZJldAi9A94yjuyu7YzTH1MuBWQuPMbdM/aPFfow+zk=
sourcecode.social/reiver/go-jsonpp v0.0.0-20230927044614-2bd26d25b35e/go.mod h1:Wk0eR28gjwBkTH+6yv6lKOjoyqCntSOgQJJksJE1xc8=
sourcecode.social/reiver/go-jsonstr v0.0.0-20230927001516-160f1f17699f h1:W6wVDR+GKH2PW4z0LuyMxD+v2R8+FlE9HHlF4aYdgeU=
sourcecode.social/reiver/go-jsonstr v0.0.0-20230927001516-160f1f17699f/go.mod h1:K97qQnuRcjjh2OjhT2BzliIZMm8hLp4qIx8arkV/tnU=
sourcecode.social/reiver/go-jsonstr v0.0.0-20230927032837-cca9187c9798 h1:yznt9jlfBogqkRvseZtzkeEA1BMktlveNVjDyoL0PSA=
sourcecode.social/reiver/go-jsonstr v0.0.0-20230927032837-cca9187c9798/go.mod h1:K97qQnuRcjjh2OjhT2BzliIZMm8hLp4qIx8arkV/tnU=
sourcecode.social/reiver/go-nul v0.0.0-20230924084858-46372d9e9949 h1:iAa2FSCR1CzOyWQgL6eUNIaII7ui87V0IOQTu4uYulU=
sourcecode.social/reiver/go-nul v0.0.0-20230924084858-46372d9e9949/go.mod h1:ZG+UaSVwpMEQr0faWJltKDXREDtzme3wCE2nutu7Tgw=
sourcecode.social/reiver/go-nul v0.0.0-20230924085205-da3d80e27a75 h1:u71gKZe6g4hPnSe7PkpkBd7zHKk6I/udCckdKG1xIiI=
sourcecode.social/reiver/go-nul v0.0.0-20230924085205-da3d80e27a75/go.mod h1:y59WFulHG1OigANht9QiVXSa5exV2bqt72RY3LmDstI=
sourcecode.social/reiver/go-nul v0.0.0-20230927004815-8a8eeb3194fa h1:ws1aQ5mMDvBbKEEk0UulTN4Mmszcs6pn4CgMcTLVkv0=
sourcecode.social/reiver/go-nul v0.0.0-20230927004815-8a8eeb3194fa/go.mod h1:4WTJneAzve27LLCE8+HRpFUIjuB3hgvZkNtlS43xbKw=
sourcecode.social/reiver/go-opt v0.0.0-20230922204021-df716e8fe048 h1:/MDewF+utMeOhLwYZmXA8GSy5Jma4/iq0fv1J+1vJT0=
sourcecode.social/reiver/go-opt v0.0.0-20230922204021-df716e8fe048/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230922223642-a33304548a94 h1:lk/e2W5McoYglMfWga0gk1YzNJYnqWA660Si4bnEwS4=
sourcecode.social/reiver/go-opt v0.0.0-20230922223642-a33304548a94/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230923002941-58bf264aa928 h1:FAQLe45K5yEDL/brV1DZN5TAJYHNgGq0EnSDFe4xTow=
sourcecode.social/reiver/go-opt v0.0.0-20230923002941-58bf264aa928/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230923212734-e38043bd8901 h1:mMuaCYrl0WklX8gDaA+WvPmXFMs2YhdbgYmW3E8A36M=
sourcecode.social/reiver/go-opt v0.0.0-20230923212734-e38043bd8901/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230924215954-cb749d3510af h1:1mjNkZavEsZJrxmCVWLFw/rMLXY1fV4nX3eXkSjeo4w=
sourcecode.social/reiver/go-opt v0.0.0-20230924215954-cb749d3510af/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230924220429-d6b2890eaa29 h1:93+N7APTX4WiA5f/1BtEYBN+uf4cFzhjudPOh5p1XJg=
sourcecode.social/reiver/go-opt v0.0.0-20230924220429-d6b2890eaa29/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230925023513-3e7cdb405e4f h1:Cp1Bz9qPPPMSQgcf79grTiPO2vnK+ILydgtBoI0HFu8=
sourcecode.social/reiver/go-opt v0.0.0-20230925023513-3e7cdb405e4f/go.mod h1:SEWWqfbCkDQCL0mpqwZEJQQkqLzhJZs1k4EmJ9xPU0E=
sourcecode.social/reiver/go-opt v0.0.0-20230927004316-272fd8451811 h1:T3ft05KUJpzkimaJXiNSpBkYJoRmyinvtrq8MbrfrFQ=
sourcecode.social/reiver/go-opt v0.0.0-20230927004316-272fd8451811/go.mod h1:O6WKM2UcKkheRT/dA6A2b1tW0m+WenSbxdcXE+idxzI=
sourcecode.social/reiver/go-pathmatch v0.0.0-20231001044920-1772a36eb6bd h1:6MIrZc2s6m4SaHnP2Aza6Cg4kMBiwpi+8mKdO9sjfhw=
sourcecode.social/reiver/go-pathmatch v0.0.0-20231001044920-1772a36eb6bd/go.mod h1:mw0k5AKQBwJ75SIP6sm9HWCSkEVxqn9UlHDH+MR8pjo=