Desenvolvedores
src_
payload.config.ts

📑 Documentação do Arquivo payload.config.ts da Pasta src

Este arquivo configura o CMS Payload para o projeto, integrando várias coleções e recursos essenciais, como suporte multilíngue, editor de texto avançado (rich-text), e armazenamento em S3 para arquivos.

🛠️ Estrutura do Arquivo

👨‍💼 1. Admin

  • Usuário de Admin: O usuário administrador é definido pela coleção Colaboradores. 🧑‍💻
  • Componentes de Interface:
    • Icon: Componente de ícone personalizado (IconHome). 🎨
    • Logo: Logo personalizada do sistema usando o componente LogoPetAcademy. 🏢

🗃️ 2. Collections (Coleções)

As coleções são usadas para armazenar diferentes tipos de dados:

  • Colaboradores: Gerencia os dados dos colaboradores. 💼
  • Alunos: Armazena informações sobre os alunos. 📚
  • Media: Lida com upload e gerenciamento de mídias, como imagens e arquivos. 🖼️
  • Cursos: Detalha os cursos oferecidos. 🎓
  • Tags: Usada para categorizar cursos e outros itens. 🏷️

🌍 3. Internacionalização (i18n)

  • Idiomas Suportados:
    • Português (pt) 🇧🇷
    • Inglês (en) 🇬🇧
  • Idioma de Fallback: Se o idioma não for detectado, o sistema usará o português como fallback. 🔄

✍️ 4. Editor Rich-Text

  • Editor: Usa o lexicalEditor para fornecer funcionalidades avançadas no editor de texto. Possui uma toolbar fixa e inline (dentro do texto). 📝

🗄️ 5. Banco de Dados

  • Adaptador de DB: O banco de dados MongoDB é integrado usando o mongooseAdapter. 🛢️
    • URL do Banco de Dados: Definido pela variável de ambiente DATABASE_URI. 🌐

☁️ 6. Armazenamento de Arquivos (S3)

  • Plugin S3: Integração com o AWS S3 para armazenamento de arquivos, com suporte para upload eficiente. 📦
    • Bucket: Definido pela variável de ambiente S3_BUCKET. 🧳
    • Acesso e Configuração: As credenciais de acesso são configuradas através de variáveis de ambiente, como accessKeyId, secretAccessKey, region, e endpoint. 🔐

🛠️ 7. Tipos TypeScript

  • Tipos TypeScript: O arquivo payload-types.ts é gerado para exportar os tipos TypeScript baseados na configuração atual. 📜

⚙️ 8. Outras Configurações

  • Biblioteca de Imagens: A biblioteca sharp é usada para manipulação de imagens, como redimensionamento e compressão. 🖼️
  • Segredo: O segredo da aplicação é configurado através da variável de ambiente PAYLOAD_SECRET. 🔑
// Importações necessárias
//@ts-nocheck
import { mongooseAdapter } from '@payloadcms/db-mongodb'
import {
  lexicalEditor,
  FixedToolbarFeature,
  InlineToolbarFeature,
} from '@payloadcms/richtext-lexical'
import path from 'path'
import { buildConfig } from 'payload'
import { fileURLToPath } from 'url'
import sharp from 'sharp'
import { pt } from 'payload/i18n/pt'
import { en } from 'payload/i18n/en'
// Coleções
import { Colaboradores } from './collections/Colaboradores'
import { Alunos } from './collections/Alunos'
import { Media } from './collections/Media'
import { Cursos } from './collections/cursos/Curso'
import { Tags } from './collections/Tags'
// Componentes
import LogoPetAcademy from '@/components/LogoPetAcademy'
import IconHome from '@/components/IconHome'
import { s3Storage } from '@payloadcms/storage-s3'
 
// Definindo o caminho do arquivo
const filename = fileURLToPath(import.meta.url)
const dirname = path.dirname(filename)
 
// Configuração final do Payload CMS
export default buildConfig({
  admin: {
    user: Colaboradores.slug,
    components: {
      graphics: {
        Icon: IconHome,
        Logo: LogoPetAcademy,
      },
    },
  },
  collections: [Colaboradores, Alunos, Media, Cursos, Tags],
  i18n: {
    supportedLanguages: {
      pt: pt,
      en: en,
    },
    fallbackLanguage: 'pt',
  },
  editor: lexicalEditor({
    features: ({ defaultFeatures }) => {
      return [...defaultFeatures, FixedToolbarFeature(), InlineToolbarFeature()]
    },
  }),
  secret: process.env.PAYLOAD_SECRET || '',
  typescript: {
    outputFile: path.resolve(dirname, 'payload-types.ts'),
  },
  db: mongooseAdapter({
    url: process.env.DATABASE_URI || '',
  }),
  sharp,
  plugins: [
    s3Storage({
      collections: {
        media: {
          prefix: 'media',
          disablePayloadAccessControl: false,
        },
      },
      bucket: process.env.S3_BUCKET,
      config: {
        forcePathStyle: true,
        credentials: {
          accessKeyId: process.env.S3_ACCESS_KEY_ID,
          secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
        },
        region: process.env.S3_REGION,
        endpoint: process.env.S3_ENDPOINT,
      },
    }),
  ],
})