feat: finish
This commit is contained in:
parent
a458a8a103
commit
ba3c4e2657
10 changed files with 60 additions and 38 deletions
3
.env
3
.env
|
|
@ -1 +1,2 @@
|
||||||
JWT_SECRET=supersekretnyklucz123
|
JWT_SECRET=supersekretnyklucz123
|
||||||
|
MONGODB_CREDENTIALS=mongodb://root:example@host.docker.internal:27017/mizuki?authSource=admin
|
||||||
|
|
@ -2,10 +2,8 @@ FROM node:20
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package*.json ./
|
|
||||||
RUN npm install
|
|
||||||
|
|
||||||
COPY . .
|
COPY . .
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
|
|
|
||||||
29
README.md
Normal file
29
README.md
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
## Projekt zaliczeniowy z laboratorium "Szkielety Programistyczne w Aplikacjach Internetowych"
|
||||||
|
|
||||||
|
## Tematyka projektu: Aplikacja do przechowywania plików (File storage app)
|
||||||
|
|
||||||
|
## Autor: Kacper Staroń
|
||||||
|
|
||||||
|
## Funkcjonalności:
|
||||||
|
- uwierzytelnianie
|
||||||
|
- rejestracja
|
||||||
|
- dodawanie plików
|
||||||
|
- usuwanie plików, zmiana ich nazwy
|
||||||
|
- zmiana danych logowania
|
||||||
|
|
||||||
|
## Narzędzia i technologie:
|
||||||
|
- strona serwera: Node.js + Express (web server) + Joi (walidacja) + Multer (middleware do obsługi uploadowania plików)
|
||||||
|
- baza danych: MongoDB + Mongoose (silnik bazy danych)
|
||||||
|
- strona klienta: Vite, Vue3, PrimeVue (komponenty)
|
||||||
|
- konteneryzacja: Docker
|
||||||
|
|
||||||
|
## Wymagania
|
||||||
|
|
||||||
|
Wersje programów wykorzystane do tworzenia aplikacji (aplikacja nie została przetestowana z kompatybilnością wcześniejszych wersji):
|
||||||
|
- MongoDB 6.0
|
||||||
|
- Node.JS 20
|
||||||
|
- Docker 28.2.2
|
||||||
|
|
||||||
|
## Uruchomienie
|
||||||
|
1. W folderze aplikacji należy uruchomić polecenie `docker compose up` aby zbudować i uruchomić kontenery aplikacji.
|
||||||
|
2. Należy uruchomić `http://localhost:5173/`.
|
||||||
6
db/db.js
6
db/db.js
|
|
@ -2,11 +2,11 @@ const mongoose = require('mongoose');
|
||||||
|
|
||||||
const connectDB = async () => {
|
const connectDB = async () => {
|
||||||
try {
|
try {
|
||||||
mongoose.connect('mongodb://root:example@localhost:27017/your-db-name?authSource=admin')
|
mongoose.connect(process.env.MONGODB_CREDENTIALS);
|
||||||
|
|
||||||
console.log('✅ MongoDB connected');
|
console.log('MongoDB connected');
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('❌ MongoDB connection error:', err.message);
|
console.error('MongoDB connection error:', err.message);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -13,5 +13,26 @@ services:
|
||||||
MONGO_INITDB_ROOT_USERNAME: root
|
MONGO_INITDB_ROOT_USERNAME: root
|
||||||
MONGO_INITDB_ROOT_PASSWORD: example
|
MONGO_INITDB_ROOT_PASSWORD: example
|
||||||
|
|
||||||
|
backend:
|
||||||
|
image: mizuki/backend
|
||||||
|
container_name: backend
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
env_file: ".env"
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
image: mizuki/frontend
|
||||||
|
container_name: frontend
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "5173:5173"
|
||||||
|
build:
|
||||||
|
context: ./frontend/
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
mongo-data:
|
mongo-data:
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
const Joi = require('joi');
|
|
||||||
|
|
||||||
const loginSchema = Joi.object({
|
|
||||||
username: Joi.string().required(),
|
|
||||||
password: Joi.string().required()
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = { loginSchema };
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
const Joi = require('joi');
|
|
||||||
|
|
||||||
const passwordChangeSchema = Joi.object({
|
|
||||||
oldPassword: Joi.string().required(),
|
|
||||||
newPassword: Joi.string().required()
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = { passwordChangeSchema };
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
function userInfoDto(user, avatar = null) {
|
|
||||||
return {
|
|
||||||
username: user.username,
|
|
||||||
avatar: avatar || null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = { userInfoDto };
|
|
||||||
|
|
@ -2,11 +2,9 @@ FROM node:20
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY package*.json ./
|
COPY . .
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
COPY . .
|
EXPOSE 5173
|
||||||
|
|
||||||
EXPOSE 3000
|
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
|
||||||
|
|
||||||
CMD ["node", "index.js"]
|
|
||||||
3
index.js
3
index.js
|
|
@ -11,7 +11,7 @@ connectDB();
|
||||||
|
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(cors({
|
app.use(cors({
|
||||||
origin: "http://localhost:5173",
|
origin: "*",
|
||||||
credentials: true,
|
credentials: true,
|
||||||
allowedHeaders: ["Content-Type", "Authorization"]
|
allowedHeaders: ["Content-Type", "Authorization"]
|
||||||
}));
|
}));
|
||||||
|
|
@ -20,7 +20,6 @@ app.use('/api/user', require('./controllers/auth.controller'));
|
||||||
app.use('/api/file', require('./controllers/file.controller'));
|
app.use('/api/file', require('./controllers/file.controller'));
|
||||||
app.use('/f', require('./controllers/serve.controller'));
|
app.use('/f', require('./controllers/serve.controller'));
|
||||||
|
|
||||||
// Start server
|
|
||||||
app.listen(PORT, () => {
|
app.listen(PORT, () => {
|
||||||
console.log(`Server running at http://localhost:${PORT}`);
|
console.log(`Server running at http://localhost:${PORT}`);
|
||||||
});
|
});
|
||||||
Loading…
Reference in a new issue