Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1st challenge #1

Merged
merged 14 commits into from
Mar 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions .env.sample

This file was deleted.

File renamed without changes.
152 changes: 152 additions & 0 deletions back/helpers/prismaHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
// prismaHelpers.js

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

// ユーザーの作成
async function createUser(name, email) {
return await prisma.user.create({
data: {
name,
email
}
});
}

// ユーザーの取得
async function getUser(userId) {
return await prisma.user.findUnique({
where: {
id: userId
}
});
}

// ユーザーの更新
async function updateUser(userId, name, email) {
try {
const updatedUser = await prisma.user.update({
where: { id: userId },
data: { name, email }
});
return updatedUser;
} catch (error) {
throw error;
}
}

// ユーザーの削除
async function deleteUser(userId) {
try {
const deletedUser = await prisma.user.delete({
where: { id: userId }
});
return deletedUser;
} catch (error) {
throw error;
}
}


// コースの作成
async function createCourse(name) {
return await prisma.course.create({
data: {
name
}
});
}

// コースの取得
async function getCourse(courseId) {
return await prisma.course.findUnique({
where: {
id: courseId
}
});
}

// フォローリクエストの作成
async function createFollowingRequest(senderId, receiverId) {
return await prisma.followingRequest.create({
data: {
sender: { connect: { id: senderId } },
receiver: { connect: { id: receiverId } },
status: 'PENDING'
}
});
}

// フォローリクエストの取得
async function getFollowingRequests(userId) {
return await prisma.user.findUnique({
where: { id: userId },
include: {followingRequests: { include: { receiver: true } } },
});
}

// フォローリクエストの更新
async function updateFollowingRequestStatus(senderIdToUpdate, newStatus, receiverIdToUpdate) {
const existingRequest = await prisma.followingRequest.findFirst({
where: {
senderId: senderIdToUpdate,
receiverId: receiverIdToUpdate,
},
});

if (!existingRequest) {
throw new Error('Following request not found');
}

// フォローリクエストのステータスを更新
await prisma.followingRequest.update({
where: { id: existingRequest.id },
data: { status: newStatus ? 'ACCEPTED' : 'REJECTED' },
});

// フォローリクエストがACCEPTEDの場合、マッチング関係を作成
if (newStatus) {
const user1Id = senderIdToUpdate < receiverIdToUpdate ? senderIdToUpdate : receiverIdToUpdate;
const user2Id = senderIdToUpdate > receiverIdToUpdate ? senderIdToUpdate : receiverIdToUpdate;

// マッチング関係を作成
await prisma.match.create({
data: {
user1: { connect: { id: user1Id } },
user2: { connect: { id: user2Id } },
status: 'ACCEPTED',
},
});
}
}
// マッチ関係を読み込む
async function getMatches() {
return prisma.match.findMany({
include: {
user1: true,
user2: true,
}
});
}

// マッチ関係を削除する
async function deleteMatch(matchId) {
return prisma.match.delete({
where: { id: matchId }
});
}

export {
createUser,
getUser,
updateUser,
deleteUser,
createCourse,
getCourse,
createFollowingRequest,
getFollowingRequests,
updateFollowingRequestStatus,
getMatches,
deleteMatch
};
138 changes: 138 additions & 0 deletions back/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
// index.js

import express from "express";
import cors from "cors";
// import { createUser, getUser,updateUser,deleteUser, createCourse, getCourse, createFollowingRequest, getFollowingRequests, updateFollowingRequestStatus,getMatches,deleteMatch } from './helpers/prismaHelpers.js';
import userRoutes from './routes/userRoutes.js';
import followingRequestRoutes from './routes/followingRequestRoutes.js';
import courseRoutes from './routes/courseRoutes.js';

const app = express();
const port = 3000;

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors({origin:process.env.WEB_ORIGIN}));

// ルートハンドラー
app.get('/', (req, res) => {
res.send('konnnitiha');
});

// ルーティング
app.use('/api/users', userRoutes);
app.use('/api/followingRequests', followingRequestRoutes);
app.use('/api/courses', courseRoutes);

// サーバーの起動
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});


// //ユーザー新規登録の例
// createUser("小林")
// .then(newUser => {
// console.log("新しいユーザーが作成されました:", newUser);
// })
// .catch(error => {
// console.error("ユーザーの作成中にエラーが発生しました:", error);
// });

// //ユーザー取得の例
// getUser(20)
// .then(user => {
// if (user) {
// console.log("ユーザーが見つかりました:", user);
// } else {
// console.log("指定されたユーザーは見つかりませんでした");
// }
// })
// .catch(error => {
// console.error("ユーザーの取得中にエラーが発生しました:", error);
// });

// //ユーザー更新の例
// updateUser(1,"砂糖")
// .then(user => {
// console.log("ユーザー情報を更新しました:", user);
// })
// .catch(error => {
// console.error("ユーザーの取得中にエラーが発生しました:", error);
// });

// //ユーザー削除の例
// deleteUser(13)
// .then(user => {
// console.log("ユーザーを削除しました:", user);
// })
// .catch(error => {
// console.error("ユーザーの取得中にエラーが発生しました:", error);
// });

// // AがBにフォローリクエストを送信する
// createFollowingRequest(1, 25)
// .then(request => {
// console.log(`${request.senderId}が${request.receiverId}にフォローリクエストをしました。`);
// })
// .catch(error => {
// console.error("フォローリクエストの作成中にエラーが発生しました:", error);
// });

// // ユーザーAがフォローリクエストしている人を取得する
// getFollowingRequests(14)
// .then(user => {
// const followingRequests = user.followingRequests.map(request => request.receiver.name);
// console.log(`${user.name}がフォローリクエストしている人は${followingRequests.join(', ')}です。`);
// })
// .catch(error => {
// console.error("フォローリクエストの取得中にエラーが発生しました:", error);
// });

// // フォローリクエストのステータスを更新する
// let newStatus ;
// updateFollowingRequestStatus(1, false, 25)
// .then(() => {
// const message = newStatus ? 'フォローリクエストが承諾されました。' : 'フォローリクエストが拒否されました。';
// console.log(message);
// })
// .catch(error => {
// console.error("フォローリクエストの更新中にエラーが発生しました:", error);
// });





// // マッチング関係を読み込む
// getMatches()
// .then(matches => {
// matches.forEach(match => {
// // user1とuser2が存在するかチェックする
// if (match.user1 && match.user2) {
// const user1Name = match.user1.name;
// const user2Name = match.user2.name;
// console.log(`${user1Name}と${user2Name}はマッチングしています`);
// } else {
// console.error("マッチング関係のユーザーが見つかりません");
// }
// });
// })
// .catch(error => {
// console.error("マッチング関係の読み込み中にエラーが発生しました:", error);
// });



// // マッチング関係を削除する
// deleteMatch(2)
// .then(deletedMatch => {
// console.log("マッチング関係を削除しました:", deletedMatch);
// })
// .catch(error => {
// console.error("マッチング関係の削除中にエラーが発生しました:", error);
// });




Loading