@@ -31,7 +31,8 @@ Leave all settings unchanged (ACL Disabled, Block all public access - checked)
3131 ],
3232 "AllowedMethods" : [
3333 " HEAD" ,
34- " PUT"
34+ " PUT" ,
35+ " GET"
3536 ],
3637 "AllowedOrigins" : [
3738 " http://localhost:3500"
@@ -507,4 +508,155 @@ You can set the maximum width for the preview image in the `./resources/apartmen
507508 ...
508509
509510});
510- ` ` `
511+ ` ` `
512+
513+ ## Using plugin for uploading avatar
514+
515+ Let's say, that you want to use upload plugin for uploading avatar for each user.
516+ To do this add avatar column to the user resource:
517+
518+
519+ ` ` ` ts title = " ./schema.prisma"
520+ model adminuser {
521+ id String @id
522+ email String @unique
523+ password_hash String
524+ role String
525+ created_at DateTime
526+ // diff-add
527+ avatar ? String
528+ }
529+ ` ` `
530+
531+ Then make migration:
532+
533+ ` ` ` bash
534+ npm run makemigration -- -- name add - user - avatar - field ; npm run migrate : local
535+ ` ` `
536+
537+ Add this column to the users resource:
538+
539+ ` ` ` ts title = " ./resources/adminuser.ts"
540+
541+ ...
542+
543+ columns : [
544+
545+ ...
546+
547+ // diff-add
548+ {
549+ // diff-add
550+ name: " avatar" ,
551+ // diff-add
552+ type: AdminForthDataTypes .STRING ,
553+ // diff-add
554+ showIn: [" show" , " edit" , " create" ],
555+ // diff-add
556+ },
557+
558+ ...
559+
560+ ]
561+
562+ ...
563+
564+ plugins : [
565+
566+ ...
567+
568+ // diff-add
569+ new UploadPlugin ({
570+ // diff-add
571+ pathColumnName: " avatar" ,
572+ // diff-add
573+ storageAdapter: new AdminForthAdapterS3Storage ({
574+ // diff-add
575+ bucket: process .env .AWS_BUCKET_NAME ,
576+ // diff-add
577+ region: process .env .AWS_REGION ,
578+ // diff-add
579+ accessKeyId: process .env .AWS_ACCESS_KEY_ID as string ,
580+ // diff-add
581+ secretAccessKey: process .env .AWS_SECRET_ACCESS_KEY as string ,
582+ // diff-add
583+ }),
584+ // diff-add
585+ allowedFileExtensions: [
586+ // diff-add
587+ " jpg" ,
588+ // diff-add
589+ " jpeg" ,
590+ // diff-add
591+ " png" ,
592+ // diff-add
593+ " gif" ,
594+ // diff-add
595+ " webm" ,
596+ // diff-add
597+ " exe" ,
598+ // diff-add
599+ " webp" ,
600+ // diff-add
601+ ],
602+ // diff-add
603+ maxFileSize: 1024 * 1024 * 20 , // 20MB
604+ // diff-add
605+ filePath : ({ originalFilename , originalExtension , contentType , record }) => {
606+ // diff-add
607+ return ` aparts/${new Date ().getFullYear ()}/${originalFilename }.${originalExtension } `
608+ // diff-add
609+ },
610+ // diff-add
611+ preview: {
612+ // diff-add
613+ maxWidth: " 200px" ,
614+ // diff-add
615+ },
616+ // diff-add
617+ }),
618+
619+ ...
620+
621+ ]
622+
623+ ` ` `
624+
625+ And finally add this callback:
626+
627+ ` ` ` ts title = " ./index.ts"
628+
629+ auth : {
630+
631+ ...
632+ // diff-add
633+ avatarUrl : async (adminUser )=> {
634+ // diff-add
635+ const plugin = admin .getPluginsByClassName (' UploadPlugin' ).find (p => p .pluginOptions .pathColumnName === ' avatar' ) as any ;
636+ // diff-add
637+ if (! plugin ) {
638+ // diff-add
639+ throw new Error (' Upload plugin for avatar not found' );
640+ // diff-add
641+ }
642+ // diff-add
643+ if (adminUser .dbUser .avatar === null || adminUser .dbUser .avatar === undefined || adminUser .dbUser .avatar === ' ' ) {
644+ // diff-add
645+ return ' ' ;
646+ // diff-add
647+ }
648+ // diff-add
649+ const imageUrl = await plugin .getFileDownloadUrl (adminUser .dbUser .avatar || ' ' , 3600 );
650+ // diff-add
651+ return imageUrl ;
652+ // diff-add
653+ },
654+
655+
656+ ...
657+
658+ }
659+
660+ ` ` `
661+
662+ And now you can easily update avatar for each user
0 commit comments