Skip to content

Commit

Permalink
refactor/change-docker-and-add-metadata-files (#20)
Browse files Browse the repository at this point in the history
* feat : Add cretateBucket command, refactor file use cases and fix presignedGetObject with change docker config

* feat : Add CreateBucketUseCase
  • Loading branch information
Murzbul authored Jan 11, 2021
1 parent f2d748c commit 4f6543e
Show file tree
Hide file tree
Showing 29 changed files with 263 additions and 89 deletions.
23 changes: 14 additions & 9 deletions .env.dev
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ NODE_ENV=development
SERVER_PORT=8089

# Database configuration
DB_HOST=db
DB_HOST=localhost
DB_USER=experience
DB_DATABASE=experience
DB_PASSWORD=experience
Expand All @@ -14,13 +14,18 @@ DB_PORT=27017
DB_SINCRONIZE=true
DB_TYPE_DEFAULT=Mongoose

S3_HOST=s3
S3_ACCESS_KEY=minio
S3_SECRET_KEY=12345678
S3_USE_SSL=false
S3_PORT=9000
S3_BUCKET_NAME=experience
FILLESYSTEM_DEFAULT=s3
CACHE_HOST=localhost
CACHE_PORT=6379
CACHE_PASSWORD=ewsua132435

MINIO_HOST=localhost
MINIO_ACCESS_KEY=minio
MINIO_SECRET_KEY=12345678
MINIO_USE_SSL=false
MINIO_PORT=9000
MINIO_BUCKET_NAME=experience
MINIO_REGION=us-east-1
FILLESYSTEM_DEFAULT=minio

TZ=UTC

Expand All @@ -29,7 +34,7 @@ JWT_EXPIRES=10
JWT_ISS=digichanges
JWT_AUD=digichanges.com

SMTP_HOST=mail
SMTP_HOST=localhost
SMTP_PORT=1025
SMTP_USERNAME=
SMTP_PASSWORD=
Expand Down
17 changes: 11 additions & 6 deletions .env.prod
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@ DB_PORT=27017
DB_SINCRONIZE=true
DB_TYPE_DEFAULT=Mongoose

S3_HOST=s3
S3_ACCESS_KEY=minio
S3_SECRET_KEY=12345678
S3_USE_SSL=false
S3_PORT=9000
CACHE_HOST=localhost
CACHE_PORT=6379
CACHE_PASSWORD=ewsua132435

minio_HOST=localhost
minio_ACCESS_KEY=minio
minio_SECRET_KEY=12345678
minio_USE_SSL=false
minio_PORT=9000
MINIO_REGION=us-east-1
S3_BUCKET_NAME=experience
FILLESYSTEM_DEFAULT=s3
FILLESYSTEM_DEFAULT=minio

TZ=UTC

Expand Down
15 changes: 8 additions & 7 deletions config/custom-environment-variables.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,14 @@
}
},
"filesystem": {
"s3": {
"endPoint": "S3_HOST",
"accessKey": "S3_ACCESS_KEY",
"secretKey": "S3_SECRET_KEY",
"useSSL": "S3_USE_SSL",
"port": "S3_PORT",
"bucket": "S3_BUCKET_NAME"
"minio": {
"endPoint": "MINIO_HOST",
"accessKey": "MINIO_ACCESS_KEY",
"secretKey": "MINIO_SECRET_KEY",
"useSSL": "MINIO_USE_SSL",
"port": "MINIO_PORT",
"region": "MINIO_REGION",
"bucket": "MINIO_BUCKET_NAME"
},
"local": "",
"default": "FILESYSTEM_DEFAULT"
Expand Down
8 changes: 4 additions & 4 deletions config/development.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,19 @@
}
},
"filesystem": {
"s3": {
"type": "s3",
"endPoint": "s3",
"minio": {
"endPoint": "minio",
"accessKey": "minio",
"secretKey": "12345678",
"useSSL": false,
"port": 9000,
"region": "us-east-1",
"bucket": "experience"
},
"local": {
"type": "local"
},
"default": "s3"
"default": "minio"
},
"encryption": {
"bcrypt": {
Expand Down
9 changes: 5 additions & 4 deletions config/production.json
Original file line number Diff line number Diff line change
Expand Up @@ -48,19 +48,20 @@
}
},
"filesystem": {
"s3": {
"type": "s3",
"endPoint": "s3",
"minio": {
"type": "minio",
"endPoint": "minio",
"accessKey": "minio",
"secretKey": "12345678",
"useSSL": false,
"port": 9000,
"region": "us-east-1",
"bucket": "experience"
},
"local": {
"type": "local"
},
"default": "s3"
"default": "minio"
},
"encryption": {
"bcrypt": {
Expand Down
8 changes: 4 additions & 4 deletions config/test.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,19 @@
}
},
"filesystem": {
"s3": {
"type": "s3",
"endPoint": "s3",
"minio": {
"endPoint": "minio",
"accessKey": "minio",
"secretKey": "12345678",
"useSSL": false,
"port": 9000,
"region": "us-east-1",
"bucket": "experience"
},
"local": {
"type": "local"
},
"default": "s3"
"default": "minio"
},
"encryption": {
"bcrypt": {
Expand Down
3 changes: 2 additions & 1 deletion dev.init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

node dist/src/command.js addUserRole --role Admin --email user@node.com --firstName node --lastName node --password 12345678 --isSuperAdmin false
node dist/src/command.js addUserRole --role SuperAdmin --email superadmin@node.com --firstName super --lastName admin --password 12345678 --isSuperAdmin true
node dist/src/command.js syncRolesPermission
node dist/src/command.js syncRolesPermission
node dist/src/command.js createBucket --bucketName experience --region us-east-1
3 changes: 1 addition & 2 deletions docker-compose.prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,4 @@ services:
- .:/usr/app:cached
ports:
- 8089:8089
networks:
- experiencenet
network_mode: host
4 changes: 1 addition & 3 deletions docker-compose.sql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,4 @@ services:
- POSTGRES_PASSWORD=experience
volumes:
- data:/var/lib/postgresql/data
networks:
- experiencenet

network_mode: host
32 changes: 12 additions & 20 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,9 @@ services:
entrypoint: bash dev.build.sh
volumes:
- .:/usr/app:cached
network_mode: host
ports:
- 8089:8089
networks:
- experiencenet

db:
container_name: experience_db_1
Expand All @@ -24,61 +23,54 @@ services:
dockerfile: Dockerfile
ports:
- 27017:27017
network_mode: host
environment:
MONGODB_ROOT_PASSWORD: 123456
MONGODB_USERNAME: experience
MONGODB_PASSWORD: experience
MONGODB_DATABASE: experience
networks:
- experiencenet
volumes:
- data:/bitnami/mongodb

mail:
container_name: experience_mail_1
restart: always
image: mailhog/mailhog:latest
network_mode: host
ports:
- 8027:8025
networks:
- experiencenet
- 8025:8025

s3:
container_name: experience_s3_1
minio:
container_name: experience_minio_1
restart: always
image: minio/minio
network_mode: host
ports:
- 9002:9000
- 9000:9000
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: 12345678
MINIO_DOMAIN: localhost
volumes:
- s3:/data
networks:
- experiencenet
- minio:/data
command: server /data

redis:
image: bitnami/redis:latest
restart: always
container_name: experience_redis_1
network_mode: host
environment:
- REDIS_PASSWORD=ewsua132435 # Security reasons
- DISABLE_COMMANDS=FLUSHDB,FLUSHALL,CONFIG # Security reasons
ports:
- 6379:6379
volumes:
- data:/bitnami/redis/data
networks:
- experiencenet

networks:
experiencenet:
driver: "bridge"

volumes:
data:
driver: "local"
s3:
minio:
driver: "local"

25 changes: 25 additions & 0 deletions src/Domain/UseCases/FileSystem/CreateBucketUseCase.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { lazyInject } from '../../../inversify.config';

import CreateBucketPayload from '../../../InterfaceAdapters/Payloads/FileSystem/CreateBucketPayload';
import {REPOSITORIES} from "../../../repositories";
import IFileRepository from "../../../InterfaceAdapters/IRepositories/IFileRepository";
import FilesystemFactory from "../../../Infrastructure/Factories/FilesystemFactory";

class CreateBucketUseCase
{
@lazyInject(REPOSITORIES.IFileRepository)
private repository: IFileRepository;

async handle(payload: CreateBucketPayload): Promise<void>
{
const bucketName = payload.getBucketName();
const region = payload.getRegion();
const bucketPolicy = payload.getBucketPolicy();

const filesystem = FilesystemFactory.create();
await filesystem.createBucket(bucketName, region);
await filesystem.setBucketPolicy(bucketPolicy, bucketName);
}
}

export default CreateBucketUseCase;
3 changes: 2 additions & 1 deletion src/Domain/UseCases/FileSystem/DownloadUseCase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@ import { lazyInject } from '../../../inversify.config';
import IFileRepository from '../../../InterfaceAdapters/IRepositories/IFileRepository';
import { REPOSITORIES } from '../../../repositories';

import { filesystem } from '../../../index';
import IdPayload from '../../../InterfaceAdapters/Payloads/Defaults/IdPayload';
import IFileDTO from '../../../InterfaceAdapters/Payloads/FileSystem/IFileDTO';
import FileDTO from '../../../InterfaceAdapters/Payloads/FileSystem/FileDTO';
import IFileDomain from '../../../InterfaceAdapters/IDomain/IFileDomain';
import FilesystemFactory from "../../../Infrastructure/Factories/FilesystemFactory";

class DownloadUseCase
{
Expand All @@ -18,6 +18,7 @@ class DownloadUseCase
const id = payload.getId();
const metadata: IFileDomain = await this.repository.getOne(id);

const filesystem = FilesystemFactory.create();
const stream = await filesystem.downloadStreamFile(id);
const fileDto = new FileDTO(metadata, stream);

Expand Down
21 changes: 18 additions & 3 deletions src/Domain/UseCases/FileSystem/GetPresignedGetObjectUseCase.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
import { filesystem } from '../../../index';
import PresignedFileRepPayload from '../../../InterfaceAdapters/Payloads/FileSystem/PresignedFileRepPayload';
import { lazyInject } from '../../../inversify.config';

import PresignedFileRepPayload from '../../../InterfaceAdapters/Payloads/FileSystem/PresignedFileRepPayload';
import {REPOSITORIES} from "../../../repositories";
import IFileRepository from "../../../InterfaceAdapters/IRepositories/IFileRepository";
import IFileDomain from "../../../InterfaceAdapters/IDomain/IFileDomain";
import FilesystemFactory from "../../../Infrastructure/Factories/FilesystemFactory";

class GetPresignedGetObjectUseCase
{
@lazyInject(REPOSITORIES.IFileRepository)
private repository: IFileRepository;

async handle(payload: PresignedFileRepPayload): Promise<string>
{
const filename = payload.getName();
const expiry = payload.getExpiry();

const file: IFileDomain = await this.repository.getOne(filename);

return await filesystem.presignedGetObject(filename);
const metadata = {
'Content-Type': file.mimeType,
'Content-Length': file.size
};

const filesystem = FilesystemFactory.create();
return await filesystem.presignedGetObject(filename, expiry, metadata);
}
}

Expand Down
1 change: 0 additions & 1 deletion src/Domain/UseCases/FileSystem/ListFilesUseCase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import IPaginator from "../../../InterfaceAdapters/Shared/IPaginator";
import IFileRepository from "../../../InterfaceAdapters/IRepositories/IFileRepository";
import { REPOSITORIES } from "../../../repositories";


class ListFilesUseCase
{
@lazyInject(REPOSITORIES.IFileRepository)
Expand Down
3 changes: 2 additions & 1 deletion src/Domain/UseCases/FileSystem/ListObjectsUseCase.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { filesystem } from '../../../index';
import ListObjectsPayload from '../../../InterfaceAdapters/Payloads/FileSystem/ListObjectsPayload';
import FilesystemFactory from "../../../Infrastructure/Factories/FilesystemFactory";


class ListObjectsUseCase
{
async handle(payload: ListObjectsPayload): Promise<any>
{
const filesystem = FilesystemFactory.create();
return await filesystem.listObjects(payload.getPrefix(), payload.getRecursive());
}
}
Expand Down
5 changes: 3 additions & 2 deletions src/Domain/UseCases/FileSystem/UpdateFileBase64UseCase.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { filesystem } from '../../../index';
import IFileRepository from "../../../InterfaceAdapters/IRepositories/IFileRepository";
import { lazyInject } from '../../../inversify.config';
import { REPOSITORIES } from '../../../repositories';
import FileUpdateBase64Payload from '../../../InterfaceAdapters/Payloads/FileSystem/FileUpdateBase64Payload';
import IFileDomain from '../../../InterfaceAdapters/IDomain/IFileDomain';
import FilesystemFactory from "../../../Infrastructure/Factories/FilesystemFactory";

class UpdateFileBase64UseCase
{
Expand All @@ -24,7 +24,8 @@ class UpdateFileBase64UseCase

await this.repository.save(file);

await await filesystem.uploadFileByBuffer(file.name, payload.getBase64());
const filesystem = FilesystemFactory.create();
await filesystem.uploadFileByBuffer(file.name, payload.getBase64());

return file;
}
Expand Down
Loading

0 comments on commit 4f6543e

Please sign in to comment.