resolver (5) 썸네일형 리스트형 [인스타그램 클론코딩] upload GraphQL을 아직 잘 모르겠다면? 나의 첫번째 GraphQL서버 만들기 upload Resolver는 AWS S3 서비스와 연계되어 사용됩니다. S3에 관한 내용은 사진 업로드 구현 포스트에서 설명하겠습니다. 다음은 업로드 영상입니다. upload.graphql caption(내용) 문자열과 files 문자열 배열을 필수로 받아서 포스트를 생성하고, 생성된 포스트의 정보를 반환하는 Resolver입니다. files 배열의 요소는 사진 웹 경로입니다. type Mutation { upload(caption: String!, files:[String!]!, location: String): Post! } Mutation은 데이터베이스를 변형시킨다는 것을 의미합니다. 클라이언트 (리액트 네이티브, 리액트 .. [인스타그램 클론코딩] toggleFollow ※ prisma의 upsert를 사용하면 더 간단히 구현할 수 있습니다. GraphQL을 아직 잘 모르겠다면? 나의 첫번째 GraphQL서버 만들기 팔로우 버튼은 특정 사용자와의 팔로우 상태를 반전시키는 버튼입니다. 그리고 toggleFollow는 클라이언트에서 팔로우 버튼을 눌렀을 때 백앤드에서 실행되는 Resolver입니다. 클라이언트에서 피드를 요청하면 백앤드는 요청자와 팔로우 상태인 사용자의 포스트만 백앤드에 요청합니다. 위의 동영상에서 팔로우가 해제됨에 따라 용 그림의 포스트가 사라지는 것을 확인할 수 있습니다. toggleFollow.graphql 팔로우되거나 언팔로우될 다른 사용자의 ID를 필수로 받아서 해당 사용자의 정보를 반환하는 Resolver입니다. Boolean 타입을 반환하도록 해.. [인스타그램 클론코딩] toggleLike GraphQL을 아직 잘 모르겠다면? 나의 첫번째 GraphQL서버 만들기 좋아요 버튼은 각각의 포스트에 포함된 하트(♥) 모양의 버튼입니다. 그리고 toggleLike는 포스트의 좋아요 버튼을 눌렀을 때, 백앤드에서 실행되는 Resolver입니다. toggleLike.graphql 요청자의 Like 레코드가 연결(등록)되거나 해제될 포스트의 ID를 필수로 받아서 해당 포스트의 정보를 반환하는 Resolver입니다. Boolean 타입을 반환하도록 해도 상관없습니다. 저는 ApolloClient의 캐시에 영향을 미치는지 테스트하기 위해서 Post 타입을 반환하도록 설정했습니다. type Mutation { toggleLike(postId: Int!): Post! } Mutation은 데이터베이스를 변형시.. [인스타그램 클론코딩] createAccount GraphQL을 아직 잘 모르겠다면? 나의 첫번째 GraphQL서버 만들기 createAccount는 클라이언트에서 직접 호출하지 않고, 사용자가 Cognito에 가입하면 Cognito의 Pre-SignUp 트리거에서 호출됩니다. 참조: [인스타그램 클론코딩] Cognito Pre-SignUp 람다 함수 createAccount.graphql userName과 email을 필수 매개값으로 받아서 문자열을 반환하는 Resolver입니다. type Mutation { createAccount( userName: String!, email: String!, firstName: String, lastName: String, name: String, bio: String, picture: String ): Str.. [인스타그램 클론코딩] 사용자 인증 & GraphQL Context 활용 Cognito ID 토큰 복호화 포스트에서 클라이언트에서 보낸 토큰을 복호화해서 userName, 이메일, 토큰 유효성을 얻을 수 있었습니다. 이때 ApolloServer 생성자의 context 속성(함수)을 사용했었는데요. 여기서 context가 반환한 객체는 GraphQL의 모든 Resolvers가 공유할 수 있습니다. 아직 GraphQL, Resolver가 뭐지 모른다면? 추천: 나의 첫번째 GraphQL서버 만들기 handler.js const server = new ApolloServer({ schema, context: async ({ event, context }) => { const authorization = event.headers.authorization || event.headers.. 이전 1 다음