Skip to content

Commit

Permalink
Atualizando avatar
Browse files Browse the repository at this point in the history
  • Loading branch information
danilo-vieira committed Sep 30, 2020
1 parent 9f58d62 commit ad50714
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 2 deletions.
6 changes: 5 additions & 1 deletion nivel-02/02-iniciando-back-end-do-app/src/config/upload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ import path from 'path';
import crypto from 'crypto';
import multer from 'multer';

const tmpFolder = path.resolve(__dirname, '..', '..', 'tmp');

export default {
directory: tmpFolder,

storage: multer.diskStorage({
destination: path.resolve(__dirname, '..', '..', 'tmp'),
destination: tmpFolder,
filename(request, file, callback) {
const filehash = crypto.randomBytes(10).toString('hex');
const fileName = `${filehash}-${file.originalname}`;
Expand Down
3 changes: 3 additions & 0 deletions nivel-02/02-iniciando-back-end-do-app/src/models/User.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ class User {
@Column()
password: string;

@Column()
avatar: string;

@CreateDateColumn()
created_at: Date;

Expand Down
22 changes: 21 additions & 1 deletion nivel-02/02-iniciando-back-end-do-app/src/routes/users.routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import multer from 'multer';
import uploadConfig from '../config/upload';

import CreateUserService from '../services/CreateUserService';
import UpdateUserAvatarService from '../services/UpdateUserAvatarService';

import ensureAuthenticated from '../middlewares/ensureAuthenticated';

Expand Down Expand Up @@ -41,7 +42,26 @@ usersRouter.patch(
ensureAuthenticated,
upload.single('avatar'),
async (request, response) => {
return response.json({ ok: true });
try {
const updateUserAvatar = new UpdateUserAvatarService();

const user = await updateUserAvatar.execute({
user_id: request.user.id,
avatarFilename: request.file.filename,
});

const userWithoutPassword = {
id: user.id,
name: user.name,
email: user.email,
created_at: user.created_at,
updated_at: user.updated_at,
};

return response.json(userWithoutPassword);
} catch (err) {
return response.status(400).json({ error: err.message });
}
},
);
export default usersRouter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { getRepository } from 'typeorm';
import path from 'path';
import fs from 'fs';

import uploadConfig from '../config/upload';
import User from '../models/User';

interface Request {
user_id: string;
avatarFilename: string;
}

class UpdateUserAvatarService {
public async execute({ user_id, avatarFilename }: Request): Promise<User> {
const usersRepository = getRepository(User);

const user = await usersRepository.findOne(user_id);

if (!user) {
throw new Error('Only authenticated user can change avatar');
}

if (user.avatar) {
const userAvatarFilePath = path.join(uploadConfig.directory, user.avatar);
const userAvatarFileExists = await fs.promises.stat(userAvatarFilePath);

if (userAvatarFileExists) {
await fs.promises.unlink(userAvatarFilePath);
}
}

user.avatar = avatarFilename;

await usersRepository.save(user);

return user;
}
}

export default UpdateUserAvatarService;

0 comments on commit ad50714

Please sign in to comment.