기본 제공 모듈 - AWS AppSync

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기본 제공 모듈

모듈은 APPSYNC_JS 런타임의 일부이며 JavaScript 해석기와 함수를 작성하는 데 도움이 되는 유틸리티를 제공합니다.

DynamoDB 모듈 함수

DynamoDB 모듈 함수는 DynamoDB 데이터 소스와 상호 작용할 때 향상된 경험을 제공합니다. 함수를 사용하고 형식 매핑을 추가하지 않고도 DynamoDB 데이터 소스에 요청을 보낼 수 있습니다.

모듈은 @aws-appsync/utils/dynamodb를 사용하여 가져옵니다.

// Modules are imported using @aws-appsync/utils/dynamodb import * as ddb from '@aws-appsync/utils/dynamodb';

함수

get<T>(payload: GetInput): DynamoDBGetItemRequest
작은 정보

에 대한 입력 자세한 내용은 섹션을 참조하세요 GetInput.

DynamoDB 에 GetItem 요청할 DynamoDBGetItemRequest 객체를 생성합니다.

import { get } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { return get({ key: { id: ctx.args.id } }); }
put<T>(payload): DynamoDBPutItemRequest

DynamoDB 에 PutItem 요청할 DynamoDBPutItemRequest 객체를 생성합니다.

import * as ddb from '@aws-appsync/utils/dynamodb' export function request(ctx) { return ddb.put({ key: { id: util.autoId() }, item: ctx.args }); }
remove<T>(payload): DynamoDBDeleteItemRequest

DynamoDB 에 DeleteItem 요청할 DynamoDBDeleteItemRequest 객체를 생성합니다.

import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { return ddb.remove({ key: { id: ctx.args.id } }); }
scan<T>(payload): DynamoDBScanRequest

DynamoDBScanRequest를 생성하여 DynamoDB에 Scan 요청을 보냅니다.

import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 10, nextToken } = ctx.args; return ddb.scan({ limit, nextToken }); }
sync<T>(payload): DynamoDBSyncRequest

DynamoDBSyncRequest 객체를 생성하여 Sync 요청을 보냅니다. 요청은 마지막 쿼리(델타 업데이트) 이후 변경된 데이터만 수신합니다. 버전이 지정된 DynamoDB 데이터 소스에만 요청할 수 있습니다.

import * as ddb from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const { limit = 10, nextToken, lastSync } = ctx.args; return ddb.sync({ limit, nextToken, lastSync }); }
update<T>(payload): DynamoDBUpdateItemRequest

DynamoDB 에 UpdateItem 요청할 DynamoDBUpdateItemRequest 객체를 생성합니다.

운영

작업 도우미를 사용하면 업데이트 중에 일부 데이터의 특정 조치를 취할 수 있습니다. 시작하려면 @aws-appsync/utils/dynamodb에서 operations를 가져옵니다.

// Modules are imported using operations import {operations} from '@aws-appsync/utils/dynamodb';
add<T>(payload)

DynamoDB를 업데이트할 때 새 속성 항목을 추가하는 도우미 함수입니다.

ID 값을 사용하여 기존 DynamoDB 항목에 주소(도로명, 구/군/시, 우편번호)를 추가하려면:

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { address: operations.add({ street1: '123 Main St', city: 'New York', zip: '10001', }), }; return update({ key: { id: 1 }, update: updateObj }); }
append <T>(payload)

DynamoDB의 기존 목록에 페이로드를 추가하는 도우미 함수입니다.

업데이트 중에 새로 추가된 친구IDs(newFriendIds)를 기존 친구 목록(friendsIds)에 추가하려면:

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [101, 104, 111]; const updateObj = { friendsIds: operations.append(newFriendIds), }; return update({ key: { id: 1 }, update: updateObj }); }
decrement (by?)

DynamoDB를 업데이트할 때 항목의 기존 속성 값을 감소시키는 도우미 함수입니다.

친구 카운터(friendsCount)를 10씩 줄이려면:

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { friendsCount: operations.decrement(10), }; return update({ key: { id: 1 }, update: updateObj }); }
increment (by?)

DynamoDB를 업데이트할 때 항목의 기존 속성 값을 증가시키는 도우미 함수입니다.

친구 카운터(friendsCount)를 10씩 늘리려면:

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { friendsCount: operations.increment(10), }; return update({ key: { id: 1 }, update: updateObj }); }
prepend <T>(payload)

DynamoDB의 기존 목록 앞에 추가되는 도우미 함수입니다.

업데이트 중에 새로 추가된 친구IDs(newFriendIds)를 기존 친구 목록(friendsIds)에 미리 추가하려면:

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [101, 104, 111]; const updateObj = { friendsIds: operations.prepend(newFriendIds), }; return update({ key: { id: 1 }, update: updateObj }); }
replace <T>(payload)

DynamoDB에서 항목을 업데이트할 때 기존 속성을 대체하는 도우미 함수입니다. 이는 페이로드의 키뿐만 아니라 속성의 전체 객체 또는 하위 객체를 업데이트하려는 경우에 유용합니다.

객체의 주소(도로명, 구/군/시, 우편번호)를 바꾸려면 다음을 수행하세요.

import { update, operations } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const updateObj = { info: { address: operations.replace({ street1: '123 Main St', city: 'New York', zip: '10001', }), }, }; return update({ key: { id: 1 }, update: updateObj }); }
updateListItem <T>(payload, index)

목록의 항목을 대체하는 도우미 함수입니다.

업데이트(newFriendIds) 범위에서, 이 예에서는 updateListItem을 사용하여 목록(friendsIds)에 있는 두 번째 항목(인덱스: 1, 새 ID: 102)과 세 번째 항목(인덱스: 2, 새 ID: 112)의 ID 값을 업데이트했습니다.

import { update, operations as ops } from '@aws-appsync/utils/dynamodb'; export function request(ctx) { const newFriendIds = [ ops.updateListItem('102', 1), ops.updateListItem('112', 2) ]; const updateObj = { friendsIds: newFriendIds }; return update({ key: { id: 1 }, update: updateObj }); }

입력

Type GetInput<T>
GetInput<T>: { consistentRead?: boolean; key: DynamoDBKey<T>; }

유형 선언

  • consistentRead?: boolean(선택 사항)

    DynamoDB를 사용하여 강력히 일관된 읽기를 수행할지 여부를 지정하는 선택적 부울입니다.

  • key: DynamoDBKey<T>(필수)

    DynamoDB에서 항목의 키를 지정하는 필수 파라미터입니다. DynamoDB 항목은 단일 해시 키 또는 해시 및 정렬 키를 가질 수 있습니다.

Type PutInput<T>
PutInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T> | null; customPartitionKey?: string; item: Partial<T>; key: DynamoDBKey<T>; populateIndexFields?: boolean; }

유형 선언

  • _version?: number (선택 사항)

  • condition?: DynamoDBFilterObject<T> | null(선택 사항)

    DynamoDB 테이블에 객체를 넣을 때 작업이 수행되기 전에 이미 DynamoDB에 있는 객체의 상태를 기반으로 요청의 성공 여부를 제어하는 조건 표현식을 선택적으로 지정할 수 있습니다.

  • customPartitionKey?: string(선택 사항)

    활성화되면 이 문자열 값은 버전 관리가 활성화되었을 때 델타 동기화 테이블에서 사용되는 ds_skds_pk 레코드의 형식을 수정합니다. 활성화되면 populateIndexFields 항목 처리도 활성화됩니다.

  • item: Partial<T>(필수)

    DynamoDB에 배치할 항목의 나머지 속성입니다.

  • key: DynamoDBKey<T>(필수)

    입력이 수행되는 DynamoDB에서 항목의 키를 지정하는 필수 파라미터입니다. DynamoDB 항목은 단일 해시 키 또는 해시 및 정렬 키를 가질 수 있습니다.

  • populateIndexFields?: boolean(선택 사항)

    customPartitionKey와 함께 활성화되면 델타 동기화 테이블, 특히 gsi_ds_pkgsi_ds_sk 열의 각 레코드에 대해 새 항목을 생성하는 부울 값입니다. 자세한 내용은 AWS AppSync 개발자 안내서의 충돌 감지 및 동기화를 참조하세요.

Type QueryInput<T>
QueryInput<T>: ScanInput<T> & { query: DynamoDBKeyCondition<Required<T>>; }

유형 선언

  • query: DynamoDBKeyCondition<Required<T>>(필수)

    쿼리할 항목을 설명하는 키 조건을 지정합니다. 지정된 인덱스의 경우 파티션 키의 조건은 동등이어야 하고 정렬 키는 비교 또는 beginsWith(문자열인 경우)여야 합니다. 파티션 및 정렬 키에는 숫자 및 문자열 유형만 지원됩니다.

    아래 User 유형을 선택하세요.

    type User = { id: string; name: string; age: number; isVerified: boolean; friendsIds: string[] }

    쿼리에는 id, nameage 필드만 포함될 수 있습니다.

    const query: QueryInput<User> = { name: { eq: 'John' }, age: { gt: 20 }, }
Type RemoveInput<T>
RemoveInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T>; customPartitionKey?: string; key: DynamoDBKey<T>; populateIndexFields?: boolean; }

유형 선언

  • _version?: number (선택 사항)

  • condition?: DynamoDBFilterObject<T>(선택 사항)

    DynamoDB에서 객체를 제거할 때 작업이 수행되기 전에 이미 DynamoDB에 있는 객체의 상태를 기반으로 요청의 성공 여부를 제어하는 조건 표현식을 선택적으로 지정할 수 있습니다.

    다음 예는 문서의 소유자가 요청한 사용자와 일치하는 경우에만 작업이 성공하도록 허용하는 조건이 포함된 DeleteItem 표현식입니다.

    type Task = { id: string; title: string; description: string; owner: string; isComplete: boolean; } const condition: DynamoDBFilterObject<Task> = { owner: { eq: 'XXXXXXXXXXXXXXXX' }, } remove<Task>({ key: { id: 'XXXXXXXXXXXXXXXX', }, condition, });
  • customPartitionKey?: string(선택 사항)

    활성화되면 customPartitionKey 값은 버전 관리가 활성화되었을 때 델타 동기화 테이블에서 사용되는 ds_skds_pk 레코드의 형식을 수정합니다. 활성화되면 populateIndexFields 항목 처리도 활성화됩니다.

  • key: DynamoDBKey<T>(필수)

    제거되는 DynamoDB에서 항목의 키를 지정하는 필수 파라미터입니다. DynamoDB 항목은 단일 해시 키 또는 해시 및 정렬 키를 가질 수 있습니다.

    User에 사용자 id의 해시 키만 있는 경우 키는 다음과 같습니다.

    type User = { id: number name: string age: number isVerified: boolean } const key: DynamoDBKey<User> = { id: 1, }

    테이블 사용자에게 해시 키(id)와 정렬 키(name)가 있는 경우 키는 다음과 같습니다.

    type User = { id: number name: string age: number isVerified: boolean friendsIds: string[] } const key: DynamoDBKey<User> = { id: 1, name: 'XXXXXXXXXX', }
  • populateIndexFields?: boolean(선택 사항)

    customPartitionKey와 함께 활성화되면 델타 동기화 테이블, 특히 gsi_ds_pkgsi_ds_sk 열의 각 레코드에 대해 새 항목을 생성하는 부울 값입니다.

Type ScanInput<T>
ScanInput<T>: { consistentRead?: boolean | null; filter?: DynamoDBFilterObject<T> | null; index?: string | null; limit?: number | null; nextToken?: string | null; scanIndexForward?: boolean | null; segment?: number; select?: DynamoDBSelectAttributes; totalSegments?: number; }

유형 선언

  • consistentRead?: boolean | null(선택 사항)

    DynamoDB를 쿼리할 때 일관된 읽기를 나타내는 선택적 부울입니다. 기본값은 false입니다.

  • filter?: DynamoDBFilterObject<T> | null(선택 사항)

    테이블에서 결과를 검색한 후 결과에 적용할 선택적 필터입니다.

  • index?: string | null(선택 사항)

    스캔할 인덱스의 선택적 이름입니다.

  • limit?: number | null(선택 사항)

    반환할 선택적 최대 결과 수입니다.

  • nextToken?: string | null(선택 사항)

    이전 쿼리를 지속하는 선택적 페이지 매김 토큰입니다. 이 토큰은 이전 쿼리에서 얻습니다.

  • scanIndexForward?: boolean | null(선택 사항)

    쿼리가 오름차순 또는 내림차순으로 수행되는지 여부를 나타내는 선택적 부울입니다. 기본적으로 이 값은 true로 설정됩니다.

  • segment?: number (선택 사항)

  • select?: DynamoDBSelectAttributes(선택 사항)

    DynamoDB에서 반환할 속성입니다. 기본적으로 AWS AppSync DynamoDB 해석기는 인덱스에 투영된 속성만 반환합니다. 지원되는 값은 다음과 같습니다.

    • ALL_ATTRIBUTES

      지정한 테이블 또는 인덱스에서 항목 속성을 모두 반환합니다. 로컬 보조 인덱스를 쿼리하는 경우 DynamoDB는 인덱스의 일치하는 각 항목에 대해 상위 테이블의 전체 항목을 가져옵니다. 인덱스가 모든 항목 속성을 프로젝션하도록 구성된 경우, 모든 데이터를 로컬의 보조 인덱스에서 얻을 수 있기 때문에 가져올 필요가 없습니다.

    • ALL_PROJECTED_ATTRIBUTES

      인덱스로 프로젝션된 모든 속성을 반환합니다. 모든 속성을 프로젝션하도록 인덱스가 구성된 경우 이 반환 값은 ALL_ATTRIBUTES를 지정하는 것과 동일합니다.

    • SPECIFIC_ATTRIBUTES

      ProjectionExpression에 나열된 속성만 반환합니다. 이 반환 값은 AttributesToGet에 대한 값을 지정하지 않고 ProjectionExpression을 지정하는 것과 같습니다.

  • totalSegments?: number(선택 사항)

Type DynamoDBSyncInput<T>
DynamoDBSyncInput<T>: { basePartitionKey?: string; deltaIndexName?: string; filter?: DynamoDBFilterObject<T> | null; lastSync?: number; limit?: number | null; nextToken?: string | null; }

유형 선언

  • basePartitionKey?: string(선택 사항)

    동기화 작업을 수행할 때 사용되는 기본 테이블의 파티션 키입니다. 이 필드를 사용하면 테이블에서 사용자 지정 파티션 키를 활용할 때 동기화 작업을 수행할 수 있습니다.

  • deltaIndexName?: string(선택 사항)

    동기화 작업에 사용되는 인덱스입니다. 이 인덱스는 테이블에서 사용자 지정 파티션 키를 사용할 때 전체 델타 저장소 테이블에서 동기화 작업을 활성화하는 데 필요합니다. 동기화 작업은 GSI ( gsi_ds_pk 및 에서 생성됨)에서 수행됩니다gsi_ds_sk.

  • filter?: DynamoDBFilterObject<T> | null(선택 사항)

    테이블에서 결과를 검색한 후 결과에 적용할 선택적 필터입니다.

  • lastSync?: number(선택 사항)

    마지막으로 성공한 동기화 작업이 시작되었던 시간(epoch 밀리초)입니다. 지정된 경우, lastSync 이후에 변경된 항목만 반환됩니다. 이 필드는 초기 동기화 작업에서 모든 페이지를 가져온 이후에만 채워져야 합니다. 생략하면 기본 테이블의 결과가 반환됩니다. 그렇지 않으면 델타 테이블의 결과가 반환됩니다.

  • limit?: number | null(선택 사항)

    한 번에 평가올 수 있는 선택적인 최대 항목 수입니다. 생략된 경우, 기본 제한이 100개 항목으로 설정됩니다. 이 필드의 최대값은 1000개 항목입니다.

  • nextToken?: string | null(선택 사항)

Type DynamoDBUpdateInput<T>
DynamoDBUpdateInput<T>: { _version?: number; condition?: DynamoDBFilterObject<T>; customPartitionKey?: string; key: DynamoDBKey<T>; populateIndexFields?: boolean; update: DynamoDBUpdateObject<T>; }

유형 선언

  • _version?: number (선택 사항)

  • condition?: DynamoDBFilterObject<T>(선택 사항)

    DynamoDB에서 객체를 업데이트할 때 작업이 수행되기 전에 이미 DynamoDB에 있는 객체의 상태를 기반으로 요청의 성공 여부를 제어하는 조건 표현식을 선택적으로 지정할 수 있습니다.

  • customPartitionKey?: string(선택 사항)

    활성화되면 customPartitionKey 값은 버전 관리가 활성화되었을 때 델타 동기화 테이블에서 사용되는 ds_skds_pk 레코드의 형식을 수정합니다. 활성화되면 populateIndexFields 항목 처리도 활성화됩니다.

  • key: DynamoDBKey<T>(필수)

    업데이트되는 DynamoDB에서 항목의 키를 지정하는 필수 파라미터입니다. DynamoDB 항목은 단일 해시 키 또는 해시 및 정렬 키를 가질 수 있습니다.

  • populateIndexFields?: boolean(선택 사항)

    customPartitionKey와 함께 활성화되면 델타 동기화 테이블, 특히 gsi_ds_pkgsi_ds_sk 열의 각 레코드에 대해 새 항목을 생성하는 부울 값입니다.

  • update: DynamoDBUpdateObject<T>

    업데이트될 속성과 해당 속성에 대한 새 값을 지정하는 객체입니다. 업데이트 객체는 add, remove, replace, increment, decrement, append, prepend, updateListItem와 함께 사용할 수 있습니다.

Amazon RDS 모듈 함수

Amazon RDS 모듈 함수는 Amazon RDS Data 로 구성된 데이터베이스와 상호 작용할 때 향상된 경험을 제공합니다API. 모듈은 @aws-appsync/utils/rds를 사용하여 가져옵니다.

import * as rds from '@aws-appsync/utils/rds';

함수를 개별적으로 가져올 수도 있습니다. 예를 들어 아래 가져오기는 sql을 사용합니다.

import { sql } from '@aws-appsync/utils/rds';

함수

모듈의 유틸리티 도우미를 AWS AppSync RDS 사용하여 데이터베이스와 상호 작용할 수 있습니다.

select 유틸리티는 관계형 데이터베이스를 쿼리하기 위한 SELECT 문을 생성합니다.

기본 사용

기본 형식에서 쿼리하려는 테이블을 지정할 수 있습니다.

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // "SELECT * FROM "persons" return createPgStatement(select({table: 'persons'})); }

테이블 식별자에 스키마를 지정할 수도 있습니다.

import { select, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { // Generates statement: // SELECT * FROM "private"."persons" return createPgStatement(select({table: 'private.persons'})); }

열 지정

columns 속성을 사용하여 열을 지정할 수 있습니다. 값으로 설정되지 않은 경우 기본값은 *입니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'name'] })); }

열 테이블도 지정할 수 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "persons"."name" // FROM "persons" return createPgStatement(select({ table: 'persons', columns: ['id', 'persons.name'] })); }

제한 및 오프셋

쿼리에 limitoffset을 적용할 수 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // LIMIT :limit // OFFSET :offset return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], limit: 10, offset: 40 })); }

순서 기준

orderBy 속성을 기준으로 결과를 정렬할 수 있습니다. 열을 지정하는 객체 배열과 선택적 dir 속성을 제공하십시오.

export function request(ctx) { // Generates statement: // SELECT "id", "name" FROM "persons" // ORDER BY "name", "id" DESC return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], orderBy: [{column: 'name'}, {column: 'id', dir: 'DESC'}] })); }

필터

특수 조건 객체를 사용하여 필터를 구축할 수 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}} })); }

필터를 결합할 수도 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME and "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: {name: {eq: 'Stephane'}, id: {gt: 10}} })); }

OR 문을 작성할 수 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE "name" = :NAME OR "id" > :ID return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { or: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

not으로 조건을 무효화할 수도 있습니다.

export function request(ctx) { // Generates statement: // SELECT "id", "name" // FROM "persons" // WHERE NOT ("name" = :NAME AND "id" > :ID) return createPgStatement(select({ table: 'persons', columns: ['id', 'name'], where: { not: [ { name: { eq: 'Stephane'} }, { id: { gt: 10 } } ]} })); }

다음 작업을 사용하여 값을 비교할 수도 있습니다.

연산자 설명 가능한 값 유형
eq 같음 숫자, 문자열, 부울
ne 같지 않음 숫자, 문자열, 부울
le 작거나 같음 숫자, 문자열
lt 보다 작음 숫자, 문자열
ge 크거나 같음 숫자, 문자열
gt 보다 큼 숫자, 문자열
다음을 포함함 좋아요 문자열
notContains 싫음 문자열
beginsWith 접두사로 시작 문자열
사이 두 값 사이 숫자, 문자열
attributeExists 속성이 null이 아닙니다. 숫자, 문자열, 부울
size 요소의 길이를 확인합니다. 문자열

insert 유틸리티는 INSERT 작업과 함께 데이터베이스에 단일 행 항목을 삽입하는 간단한 방법을 제공합니다.

단일 항목 삽입

항목을 삽입하려면 테이블을 지정한 다음 값 객체를 전달하십시오. 객체 키는 테이블 열에 매핑됩니다. 열 이름은 자동으로 이스케이프 처리되고 변수 맵을 사용하여 값이 데이터베이스로 전송됩니다.

import { insert, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) return createMySQLStatement(insertStatement) }

내SQL 사용 사례

select가 뒤따르는 insert를 결합하여 삽입된 행을 검색할 수 있습니다.

import { insert, select, createMySQLStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values }); const selectStatement = select({ table: 'persons', columns: '*', where: { id: { eq: values.id } }, limit: 1, }); // Generates statement: // INSERT INTO `persons`(`name`) // VALUES(:NAME) // and // SELECT * // FROM `persons` // WHERE `id` = :ID return createMySQLStatement(insertStatement, selectStatement) }

Postgres 사용 사례

Postgres를 사용하면 삽입한 행에서 데이터를 가져오는 데 returning을 사용할 수 있습니다. * 또는 열 이름 배열을 받아들입니다.

import { insert, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: values } = ctx.args; const insertStatement = insert({ table: 'persons', values, returning: '*' }); // Generates statement: // INSERT INTO "persons"("name") // VALUES(:NAME) // RETURNING * return createPgStatement(insertStatement) }

update 유틸리티를 사용하여 기존 행을 업데이트할 수 있습니다. 조건 객체를 사용하여 조건을 충족하는 모든 행의 지정된 열에 변경 내용을 적용할 수 있습니다. 예를 들어 이러한 변형을 만들 수 있는 스키마가 있다고 가정해 보겠습니다. 해당 2000 연도부터 인식(known_since)하게 된 경우에만 Personname3id 값으로 업데이트하려고 합니다.

mutation Update { updatePerson( input: {id: 3, name: "Jon"}, condition: {known_since: {ge: "2000"}} ) { id name } }

업데이트 해석기는 다음과 같이 생겼습니다.

import { update, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id, ...values }, condition } = ctx.args; const where = { ...condition, id: { eq: id }, }; const updateStatement = update({ table: 'persons', values, where, returning: ['id', 'name'], }); // Generates statement: // UPDATE "persons" // SET "name" = :NAME, "birthday" = :BDAY, "country" = :COUNTRY // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

조건에 검사를 추가하여 3와 동등한 프라이머리 키 id를 가진 행만 업데이트되도록 할 수 있습니다. 마찬가지로 Postgres inserts의 경우 수정된 데이터를 반환하는 데 returning을 사용할 수 있습니다.

remove 유틸리티를 사용하여 기존 행을 제거할 수 있습니다. 조건을 충족하는 모든 행에서 조건 객체를 사용할 수 있습니다. delete 는 에서 예약 키워드입니다 JavaScript. 대신 를 사용해야 remove 합니다.

import { remove, createPgStatement } from '@aws-appsync/utils/rds'; export function request(ctx) { const { input: { id }, condition } = ctx.args; const where = { ...condition, id: { eq: id } }; const deleteStatement = remove({ table: 'persons', where, returning: ['id', 'name'], }); // Generates statement: // DELETE "persons" // WHERE "id" = :ID // RETURNING "id", "name" return createPgStatement(updateStatement) }

캐스팅

올바른 객체 유형을 더 구체적으로 지정하여 문에 사용하려는 경우가 있을 수 있습니다. 제공된 유형 힌트를 사용하여 파라미터 유형을 지정할 수 있습니다. 는 데이터 와 동일한 유형 힌트를 AWS AppSync 지원합니다API. 모듈의 typeHint 함수를 사용하여 파라미터를 캐스팅할 AWS AppSync rds 수 있습니다.

다음 예제에서는 배열을 JSON 객체로 캐스팅되는 값으로 전송할 수 있습니다. 연->산자를 사용하여 JSON 배열의 index 2 에서 요소를 검색합니다.

import { sql, createPgStatement, toJsonObject, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const arr = ctx.args.list_of_ids const statement = sql`select ${typeHint.JSON(arr)}->2 as value` return createPgStatement(statement) } export function response(ctx) { return toJsonObject(ctx.result)[0][0].value }

캐스팅은 DATE, TIMETIMESTAMP 등을 처리하고 비교할 때도 유용합니다.

import { select, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const when = ctx.args.when const statement = select({ table: 'persons', where: { createdAt : { gt: typeHint.DATETIME(when) } } }) return createPgStatement(statement) }

다음에서는 현재 날짜와 시간을 보낼 수 있는 방법을 보여줍니다.

import { sql, createPgStatement, typeHint } from '@aws-appsync/utils/rds'; export function request(ctx) { const now = util.time.nowFormatted('YYYY-MM-dd HH:mm:ss') return createPgStatement(sql`select ${typeHint.TIMESTAMP(now)}`) }

사용 가능한 유형 힌트

  • typeHint.DATE – 해당 파라미터는 DATE 유형의 객체로 데이터베이스에 전송됩니다. 승인된 형식은 YYYY-MM-DD입니다.

  • typeHint.DECIMAL – 해당 파라미터는 DECIMAL 유형의 객체로 데이터베이스에 전송됩니다.

  • typeHint.JSON – 해당 파라미터는 JSON 유형의 객체로 데이터베이스에 전송됩니다.

  • typeHint.TIME – 해당 문자열 파라미터 값은 TIME 유형의 객체로 데이터베이스에 전송됩니다. 승인된 형식은 HH:MM:SS[.FFF]입니다.

  • typeHint.TIMESTAMP – 해당 문자열 파라미터 값은 TIMESTAMP 유형의 객체로 데이터베이스에 전송됩니다. 승인된 형식은 YYYY-MM-DD HH:MM:SS[.FFF]입니다.

  • typeHint.UUID – 해당 문자열 파라미터 값은 UUID 유형의 객체로 데이터베이스에 전송됩니다.