-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
マイルストーン編集用のfetchロジックを作る #39
The head ref may contain hidden characters: "38-\u30DE\u30A4\u30EB\u30B9\u30C8\u30FC\u30F3\u7DE8\u96C6\u7528\u306Efetch\u30ED\u30B8\u30C3\u30AF\u3092\u4F5C\u308B"
Changes from 13 commits
bfae217
35a9d5c
e614041
db61151
45d3264
19a890a
fb0fd9d
91e8f49
9861b40
01e07f6
f3d29d1
236219f
69a82d7
4b8e2ad
eacfad9
b76469b
76b7775
2b84d01
0e23201
86c23d6
a67ce40
7e73f68
780967e
65a4ff9
6f36a77
a60bcfb
7856026
8c2ddeb
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import axios from "axios"; | ||
|
||
const useApiPBClient = () => { | ||
interface BackendResponse { | ||
data: any; | ||
unauthorized: boolean; | ||
error: any; | ||
} | ||
|
||
// get access token | ||
const token = localStorage.getItem("token"); | ||
const headers = { | ||
"Content-Type": "application/octet-stream", | ||
...(token ? { Authorization: `Bearer ${token}` } : {}), | ||
}; | ||
|
||
const get = async ( | ||
url: string, | ||
params?: Record<string, any>, | ||
): Promise<BackendResponse> => { | ||
return await axios | ||
.get(process.env.NEXT_PUBLIC_BACKEND_DOMAIN + url, { params, headers }) | ||
.then((resp) => { | ||
if (resp.status < 210) { | ||
return { data: resp.data, unauthorized: false, error: null }; | ||
} | ||
if (resp.status === 401) { | ||
return { data: null, unauthorized: true, error: resp.status }; | ||
} | ||
return { data: null, unauthorized: false, error: resp.statusText }; | ||
}); | ||
}; | ||
|
||
const put = async (url: string, body: any): Promise<BackendResponse> => { | ||
return await axios | ||
.put(process.env.NEXT_PUBLIC_BACKEND_DOMAIN + url, body, { headers }) | ||
.then((resp) => { | ||
if (resp.status < 210) { | ||
return { data: resp.data, unauthorized: false, error: null }; | ||
} | ||
if (resp.status === 401) { | ||
return { data: null, unauthorized: true, error: resp.status }; | ||
} | ||
return { data: null, unauthorized: false, error: resp.statusText }; | ||
}); | ||
}; | ||
|
||
const post = async (url: string, body: any): Promise<BackendResponse> => { | ||
return await axios | ||
.post(process.env.NEXT_PUBLIC_BACKEND_DOMAIN + url, body, { headers }) | ||
.then((resp) => { | ||
if (resp.status < 210) { | ||
return { data: resp.data, unauthorized: false, error: null }; | ||
} | ||
if (resp.status === 401) { | ||
return { data: null, unauthorized: true, error: resp.status }; | ||
} | ||
return { data: null, unauthorized: false, error: resp.statusText }; | ||
}); | ||
}; | ||
return { get, put, post }; | ||
}; | ||
|
||
export default useApiPBClient; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
"use client"; | ||
import axios from "axios"; | ||
import { | ||
Milestone, | ||
MilestoneCreateRequest, | ||
MilestoneCreateResponse, | ||
} from "../../proto/typescript/pb_out/main"; | ||
|
||
import useApiPBClient from "@/hooks/useApiPBClient"; | ||
|
||
const protobuf = require("protobufjs"); | ||
|
||
const useFetchMilestone = () => { | ||
const client = useApiPBClient(); | ||
|
||
const create = async ( | ||
newMilestoen: MilestoneCreateRequest, | ||
): Promise<MilestoneCreateResponse> => { | ||
return await client.post("/milestone", newMilestoen).then((resp) => { | ||
if (resp.unauthorized) { | ||
throw new Error("unauthorized"); | ||
} | ||
if (resp.error) { | ||
throw new Error(resp.error); | ||
} | ||
return MilestoneCreateResponse.fromBinary(resp.data); | ||
}); | ||
}; | ||
|
||
const update = async ( | ||
newMilestoen: MilestoneCreateRequest, | ||
): Promise<MilestoneUpdateResponse> => { | ||
return await client | ||
.put(`/milestone/${newMilestoen.milestone?.milestoneId}`, newMilestoen) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. clientなんですが 現状 |
||
.then((resp) => { | ||
if (resp.unauthorized) { | ||
throw new Error("unauthorized"); | ||
} | ||
if (resp.error) { | ||
throw new Error(resp.error); | ||
} | ||
return MilestoneUpdateResponse.fromBinary(resp.data); | ||
}); | ||
}; | ||
|
||
const _delete = async ( | ||
milestoneId: string, | ||
): Promise<MilestoneDeleteResponse> => { | ||
return await client.delete(`/milestone/${milestoneId}`).then((resp) => { | ||
if (resp.unauthorized) { | ||
throw new Error("unauthorized"); | ||
} | ||
if (resp.error) { | ||
throw new Error(resp.error); | ||
} | ||
return MilestoneDeleteResponse.fromBinary(resp.data); | ||
}); | ||
}; | ||
|
||
return { create, update, _delete }; | ||
}; | ||
|
||
export default useFetchMilestone; |
Original file line number | Diff line number | Diff line change | ||
---|---|---|---|---|
@@ -0,0 +1,80 @@ | ||||
"use client"; | ||||
import axios from "axios"; | ||||
import { | ||||
UserData, | ||||
UserInfoResponse, | ||||
UserInfosResponse, | ||||
} from "../../proto/typescript/pb_out/main"; | ||||
import useApiPBClient from "@/hooks/useApiPBClient"; | ||||
|
||||
const protobuf = require("protobufjs"); | ||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||
|
||||
const useFetchUser = () => { | ||||
const client = useApiPBClient(); | ||||
|
||||
const me = async (): Promise<UserInfoResponse> => { | ||||
return await client.get(`/api/v1/user/info/me`).then((resp) => { | ||||
if (resp.unauthorized) { | ||||
throw new Error("unauthorized"); | ||||
} | ||||
if (resp.error) { | ||||
throw new Error(resp.error); | ||||
} | ||||
return UserInfoResponse.fromBinary(resp.data); | ||||
}); | ||||
}; | ||||
|
||||
const get = async (userId: string): Promise<UserInfoResponse> => { | ||||
return await client.get(`/api/v1/user/info/${userId}`).then((resp) => { | ||||
if (resp.unauthorized) { | ||||
throw new Error("unauthorized"); | ||||
} | ||||
if (resp.error) { | ||||
throw new Error(resp.error); | ||||
} | ||||
return UserInfoResponse.fromBinary(resp.data); | ||||
}); | ||||
}; | ||||
|
||||
const list = async (): Promise<UserInfosResponse> => { | ||||
return await client.get("/api/v1/user/info/").then((resp) => { | ||||
if (resp.unauthorized) { | ||||
throw new Error("unauthorized"); | ||||
} | ||||
if (resp.error) { | ||||
throw new Error(resp.error); | ||||
} | ||||
return UserInfosResponse.fromBinary(resp.data); | ||||
}); | ||||
}; | ||||
|
||||
const create = async (newUser: UserData): Promise<UserInfoResponse> => { | ||||
return await client.put(`/user/${newUser.userId}`, newUser).then((resp) => { | ||||
if (resp.unauthorized) { | ||||
throw new Error("unauthorized"); | ||||
} | ||||
if (resp.error) { | ||||
throw new Error(resp.error); | ||||
} | ||||
return UserInfoResponse.fromBinary(resp.data); | ||||
}); | ||||
}; | ||||
|
||||
// const icon = async (userId: string, file: File) => { | ||||
// return await client.put( | ||||
// `/user/${userId}/icon`, | ||||
// ).then((resp) => { | ||||
// if (resp.unauthorized) { | ||||
// throw new Error("unauthorized"); | ||||
// } | ||||
// if (resp.error) { | ||||
// throw new Error(resp.error); | ||||
// } | ||||
// return UserInfoResponse.fromBinary(resp.data) | ||||
// }) | ||||
// } | ||||
|
||||
return { me, get, list, create }; | ||||
}; | ||||
|
||||
export default useFetchUser; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,38 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
import axios from "axios"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const protobuf = require("protobufjs"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const useImageUploder = () => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const upload = async (image: File): Promise<string | void> => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const token = localStorage.getItem("token"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const ImageUploadRequest = protobuf.roots.default.lookupType( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"main.ImageUploadRequest", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const payload = { image: image }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const errMsg = ImageUploadRequest.verify(payload); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (errMsg) throw Error(`ImageUploadRequest: ${errMsg}`); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const imageUpload = ImageUploadRequest.create(payload); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const buffer = ImageUploadRequest.encode(imageUpload).finish(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await axios | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.post(`${process.env.BACKEND_DOMAIN}/api/v1/image/upload`, buffer, { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
headers: { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Authorization: `token ${token}`, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.then((response) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const ImageUploadResponse = protobuf.roots.default.lookupType( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"main.ImageUploadResponse", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const res = ImageUploadResponse.decode(new Uint8Array(response.data)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return res; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.catch((error) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
console.log(error); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return { upload }; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
export default useImageUploder; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.