📑 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 componenteLogoPetAcademy
. 🏢
🗃️ 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
. 🌐
- URL do Banco de Dados: Definido pela variável de ambiente
☁️ 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
, eendpoint
. 🔐
- Bucket: Definido pela variável de ambiente
🛠️ 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,
},
}),
],
})