7/18 movie, review, user schema 정의

낄낄박사·2024년 7월 18일

Gotcha

목록 보기
3/22

movie

import {defineArrayMember, defineField, defineType} from 'sanity'

export const movie = defineType({
  name: 'movie',
  title: 'Movie',
  type: 'document',
  fields: [
    defineField({
      title: 'Title',
      name: 'title',
      type: 'string',
    }),
    defineField({
      title: 'Genres',
      name: 'genres',
      type: 'array',
      of: [
        {
          type: 'string',
          name: 'genre',
        },
      ],
    }),
    defineField({
      title: 'ReleaseDate',
      name: 'releaseDate',
      type: 'date',
    }),
    defineField({
      title: 'ProductionCountries',
      name: 'productionCountries',
      type: 'string',
    }),
    defineField({
      title: 'RunTime',
      name: 'runtime',
      type: 'number',
    }),
    defineField({
      title: 'Certification',
      name: 'certification',
      type: 'string',
    }),
    defineField({
      title: 'PosterPath',
      name: 'posterPath',
      type: 'string',
    }),
    defineField({
      title: 'Overview',
      name: 'overview',
      type: 'text',
    }),
    defineField({
      title: 'Reviews',
      name: 'reviews',
      type: 'array',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [
            {
              type: 'review',
            },
          ],
        }),
      ],
    }),
    defineField({
      title: 'Cast',
      name: 'cast',
      type: 'array',
      of: [{type: 'string'}],
    }),
  ],
})

review

import {defineField, defineType} from 'sanity'

export const review = defineType({
  name: 'review',
  title: 'Review',
  type: 'document',
  fields: [
    defineField({
      title: 'Author',
      name: 'author',
      type: 'reference',
      to: [{type: 'user'}],
    }),
    defineField({
      title: 'CreatedAt',
      name: 'createdAt',
      type: 'datetime',
    }),
    defineField({
      title: 'updatedAt',
      name: 'updatedAt',
      type: 'datetime',
    }),
    defineField({
      title: 'Movie',
      name: 'movie',
      type: 'reference',
      to: [{type: 'movie'}],
    }),
    defineField({
      title: 'content',
      name: 'content',
      type: 'text',
    }),
    defineField({
      title: 'Rating',
      name: 'rating',
      type: 'number',
    }),
  ],
})

user

import {defineArrayMember, defineField, defineType} from 'sanity'

// username, name, avatar, email, reviews, ratings
export const user = defineType({
  title: 'User',
  name: 'user',
  type: 'document',
  fields: [
    defineField({
      title: 'Username',
      name: 'username',
      type: 'string',
    }),
    defineField({
      title: 'Name',
      name: 'name',
      type: 'string',
    }),
    defineField({
      title: 'Email',
      name: 'email',
      type: 'string',
    }),
    defineField({
      title: 'avatar',
      name: 'Avatar',
      type: 'string',
    }),
    defineField({
      title: 'Reviews',
      name: 'reviews',
      type: 'array',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [
            {
              type: 'review',
            },
          ],
        }),
      ],
    }),
    defineField({
      title: 'Following',
      name: 'following',
      type: 'array',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [
            {
              type: 'user',
            },
          ],
        }),
      ],
      validation: (Rule) => Rule.unique(),
    }),
    defineField({
      title: 'Followers',
      name: 'followers',
      type: 'array',
      of: [
        defineArrayMember({
          type: 'reference',
          to: [
            {
              type: 'user',
            },
          ],
        }),
      ],
      validation: (Rule) => Rule.unique(),
    }),
    defineField({
      title: 'Collection',
      name: 'collection',
      type: 'array',
      of: [
        {
          type: 'reference',
          to: [
            {
              type: 'movie',
            },
          ],
        },
      ],
      validation: (Rule) => Rule.unique(),
    }),
  ],
  preview: {
    select: {
      title: 'name',
      subtitle: 'username',
    },
  },
})

0개의 댓글