'Review/백엔드 - 인스타그램 클론' 카테고리의 글 목록

Review/백엔드 - 인스타그램 클론 10

Prisma & Graphql 관련 버그 모음

몇 번이고 프리즈마 코드를 다시 작성하고 뒤집어 엎으면서 겪은 에러들 정리 에러 때문에 도무지 진도가 나가질 않는다..프론트 하나도 못 건드리고 이것들 (포함한 온갖 잡 에러) 잡는데 며칠이 걸렸다...아...정말 난 살면서 백엔드 건드릴 일이 없을 텐데 ...!!🤯 1. 프리즈마 어드민 서버 접속이 안됨 us서버 쓰다 문제 생길 수 있는 건 가봄 ( 잘 모르겠음 ) 서버 날리고 eu서버로 다시 만들어 보니 잘 돌아가고 있다. 2. Query root type must be provided. 이거 때매 또 뒤집어 엎고 혼자 새벽에 난리 난리 였는데 그냥 임시의 가짜 쿼리를 하나 넣어주도록 하자. 이렇게 👇

[Prisma] Subscription

메시지를 주고 받는 기능을 만들었으니 이제 받는 기능을 만든다~ 프리즈마의 Subscription란 기능을 이용하면 서버가 계속 리스닝하고 있다가 새로운 변화를 감지해줌 Id 에게 ( 로그인 된 대상) 보내진 message를 얻는 것을 할 것. 메세지의 id 는 roomid 이고, 우리에게 보내진 message 또한 subscribe 할 것이다. 프리즈마 서버에서 Subscription을 만들어 보기로 한다 mutation_in은 어떤 mutation을 subscribe할 지 정하는 것인데 새로운 message를 하고 싶으면 create 를 하면 된다 delete,updated 등등.. 할 수 있다. 이번엔 CREATED를 사용한다. 프리즈마 서버에서 테스트하기위해 기존의 룸 아이디를 가져와 테스트를 해..

[Prisma] 메시지 보내기

데이터 모델 1 2 3 4 5 6 7 8 9 10 11 12 13 type Room { id: ID! @id participants: [User!]! messages: [Message!]! @relation(name: "MessageOfRoom" , onDelete: CASCADE) } type Message { id: ID! @id text: String! from: User! @relation(name: "From") to: User! @relation(name: "To") room: Room! @relation(name: "MessageOfRoom") } Colored by Color Scripter cs Room 내부에서 메시지 보내고 받음 그래서 전체 Rooms를 볼 수 있는 seeRooms 쿼..

[Prisma] seeFeed Mutation

내가 팔로우 하는 사람들의 Posts 만 모아서 시간별로 가져오고 싶다. seeFeed.graphql 1 2 3 type Query { seeFeed: [Post!]! } cs 프리즈마 서버에 접속해 쿼리를 확인해보고 following 하는 사람들 배열을 어케 써먹을 수 있는지 보기루함 posts 의 user id부분을 여러 개가 해당하는 것을 불러와야 하는데 id_in 이 배열을 불러와서 해당하는 값에 맞는 것을 찾아주는 것임을 확인했다. 이렇게 배열만 넣어주면 쉽게 해당하는 값을 전부 볼 수 있다. order_by 에 의해서 내림차순으로 불러올 수 있는 기능도 확인하여 같이 쓰기로 함. orderBy의 위치는 where과 동일 위치에 넣어주면 됨 seeFeed.js 1 2 3 4 5 6 7 8 9 1..

[Prisma] @relation onDelete 정의

editPost 에서 deletePost 기능도 구현해보도록 한다 editPost.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import { prisma } from "../../../../generated/prisma-client"; const DELETE = "DELETE"; const EDIT = "EDIT"; export default { Mutation:{ editPost : async (_, args, {request, isAuthenticated}) => { isAuthenticated(request); const { id, caption, location, action} = args; const..

[Prisma & GraphQL] enum 으로 기능 확장해 사용하기

EditPost 를 만들면서 DeletePost 도 만들 것이다. EditPost.graphql 1 2 3 4 5 6 7 8 enum ACTIONS { EDIT DELETE } type Mutation { editPost(id: String!,caption: String, location:String , action:ACTIONS) : Post! } Colored by Color Scripter cs enum 이란 기능의 확장 및 열거라고 생각하면 된다 GraphQL 공식 문서에선 이렇게 설명하고 있다. 더보기 Enums 라고도 하는 열거형 타입은 특정 값들로 제한되는 특별한 종류의 스칼라입니다. 이를 통해 다음과 같은 작업을 할 수 있습니다. 타입의 인자가 허용된 값 중 하나임을 검증합니다. 필드가 항..

[Prisma] _some, _every, _none, follow 여부 검사

선택한 유저를 내가 follow 하고 있는지 아닌지 여부를 검사한다. computed.js 내부의 resolver 데이터 모델은 따로 스키마에 작성해놓도록 함. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 isFollowing: async (parent, _, { request }) => { const { user } = request; const { id: parentId } = parent; try { return prisma.$exists.user({ AND: [ { id: user.id }, { following_some: { id: parentId } } ] }); } catch { return false; } }, Colored by Color S..

[Prisma] custom/computed field

데이터 베이스엔 없어도 예를 들면 firstName 과 lastName이 합쳐진 fullName 이라는 데이터 필드를 만들고 싶을 때 (다른 필드와는 관계없이 독자적인 필드) custom field/ computed field 라는 것을 만든다. 기존의 me.js 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import { prisma } from "../../../../generated/prisma-client"; export default { Query: { me: async (_, __, { request, isAuthenticated }) => { isAuthenticated(request); const { use..

[prisma] connection, $fragment

특정 Post 에 대한 Like이란 항목의 수를 세어 LikeCount 라는 데이터를 만들어야 하는 상황 데이터 모델은 이러하다 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 type Post { id: ID! @id location: String caption: String! user: User! files: [File!]! likes: [Like!]! comments: [Comment!]! } type Like { id: ID! @id user: User! post: Post! } cs prisma.like을 불러와서 열어보면 전부가 있을 거라고 생각했지만 prisma client는 생각보다 자세히 제공하지 않는다. (이론적으로는 전부를 불러오면 데이터 트리를 타고 찾는 게 가능하지..

[Prisma] $exists

prisma.$exists.~ : 특정 요소가 있는 지 존재여부를 판단해준다. 조건 작성 가능 (boolean) where 필터를 인자로 받아 추출함 예시 1) id:~~~를 가진 유저가 있는 지 판단 const userExists = prisma.$exists.user({ id: 'cjli6tko8005t0a23fid7kke7', }) 2) description 에 graphql 이나 prisma가 있고 && 2018에 created 된 것 const linkExists = await prisma.$exists.link({ AND: [ { OR: [ { description_contains: 'graphql', }, { description_contains: 'prisma', }, ], }, { AND..