Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
students
travel
Commits
d686ba4f
Commit
d686ba4f
authored
Jul 25, 2022
by
Lee Soobeom
Browse files
update Set
parent
769ea9f4
Changes
8
Hide whitespace changes
Inline
Side-by-side
frontend/src/apis/post.api.ts
View file @
d686ba4f
...
...
@@ -2,26 +2,24 @@ import axios from "axios";
import
baseUrl
from
"
./baseUrl
"
;
import
{
PostType
}
from
"
../types
"
;
//Create
export
const
createFileAndPost
=
async
(
formdata
:
FormData
)
=>
{
const
{
data
}
=
await
axios
.
post
(
`
${
baseUrl
}
/posts/`
,
formdata
);
return
data
;
};
//Read
export
const
getData
=
async
()
=>
{
const
{
data
}
=
await
axios
.
get
(
`
${
baseUrl
}
/posts/`
);
return
data
;
};
//board
};
export
const
getFileByPostId
=
async
(
postId
:
string
)
=>
{
const
{
data
}
=
await
axios
.
get
(
`
${
baseUrl
}
/posts/files/
${
postId
}
`
);
return
data
;
};
//
export
const
getImgData
=
async
(
name
:
string
)
=>
{
const
{
data
}
=
await
axios
.
get
(
`/images/
${
name
}
`
);
return
data
;
};
//Update
export
const
addCounts
=
async
(
postId
:
string
,
counts
:
number
)
=>
{
const
{
data
}
=
await
axios
.
post
(
`
${
baseUrl
}
/posts/
${
postId
}
`
,
{
counts
:
counts
+
1
,
...
...
@@ -29,12 +27,13 @@ export const addCounts = async (postId: string, counts: number) => {
return
data
;
};
export
const
delete
Post
=
async
(
postId
:
string
)
=>
{
const
{
data
}
=
await
axios
.
delete
(
`
${
baseUrl
}
/posts/
${
postId
}
`
);
export
const
updateImgAnd
Post
=
async
(
postId
:
string
,
formdata
:
FormData
)
=>
{
const
{
data
}
=
await
axios
.
put
(
`
${
baseUrl
}
/posts/
${
postId
}
`
,
formdata
);
return
data
;
};
export
const
updateImgAndPost
=
async
(
postId
:
string
,
formdata
:
FormData
)
=>
{
const
{
data
}
=
await
axios
.
put
(
`
${
baseUrl
}
/posts/
${
postId
}
`
,
formdata
);
//Delete
export
const
deletePost
=
async
(
postId
:
string
)
=>
{
const
{
data
}
=
await
axios
.
delete
(
`
${
baseUrl
}
/posts/
${
postId
}
`
);
return
data
;
};
frontend/src/board/board.tsx
View file @
d686ba4f
...
...
@@ -13,7 +13,7 @@ export default function BoardPage() {
useEffect
(()
=>
{
getDataList
();
},
[]);
},
[
posts
]);
// posts
const
getDataList
=
async
()
=>
{
const
res
=
await
postApi
.
getData
();
...
...
frontend/src/post/editpost.tsx
View file @
d686ba4f
...
...
@@ -41,13 +41,13 @@ export function EditPost() {
getFilesList
(
post
.
_id
);
},
[]);
const
imgArr
=
new
Array
();
const
getFilesList
=
async
(
postId
:
string
)
=>
{
const
res
=
await
postApi
.
getFileByPostId
(
postId
);
//_id는 req.params에 항상 같이 보낸다
const
res
=
await
postApi
.
getFileByPostId
(
postId
);
setFilesList
(
res
);
};
const
imgArr
=
new
Array
();
const
updateImg2Db
=
async
(
filelist
:
FileList
)
=>
{
const
formdata
=
new
FormData
();
formdata
.
append
(
"
title
"
,
user
.
title
);
...
...
@@ -250,6 +250,7 @@ export function EditPost() {
onChange
=
{
titleChange
}
placeholder
=
"제목을 입력해 주세요!"
className
=
"flex w-96 border-2 border-sky-500 rounded"
defaultValue
=
{
post
.
title
}
/>
<
div
className
=
"flex flex-col mt-1 mb-1"
>
<
div
className
=
"flex gap-x-2 h-48 overflow-x-scroll"
>
...
...
@@ -268,6 +269,7 @@ export function EditPost() {
name
=
"text"
placeholder
=
"여행 후기를 알려주세요!"
className
=
"flex w-96 h-96 border-2 border-sky-500 rounded"
defaultValue
=
{
post
.
text
}
/>
</
div
>
</
form
>
...
...
frontend/src/post/intopost.tsx
View file @
d686ba4f
...
...
@@ -34,7 +34,6 @@ export function IntoPost() {
useEffect
(()
=>
{
getFilesList
(
post
.
_id
);
console
.
log
(
"
newfilename
"
,
filesList
?.[
0
].
newfilename
);
},
[]);
const
getFilesList
=
async
(
postId
:
string
)
=>
{
...
...
src/controllers/post.controller.ts
View file @
d686ba4f
...
...
@@ -5,6 +5,18 @@ import { asyncWrap } from "../helpers";
import
{
postDb
,
userDb
}
from
"
../db
"
;
import
{
TypedRequest
}
from
"
../types
"
;
export
const
userByPostId
=
(
reqExp
:
Request
,
res
:
Response
,
next
:
NextFunction
,
postId
:
string
)
=>
{
const
req
=
reqExp
as
TypedRequest
;
req
.
user
=
userDb
.
findUserByPostId
(
postId
);
next
();
};
//Create
export
const
createFileAndPost
=
asyncWrap
(
async
(
reqExp
,
res
,
next
)
=>
{
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
string
}
>
;
...
...
@@ -66,6 +78,8 @@ export const createFileAndPost = asyncWrap(async (reqExp, res, next) => {
user
:
userId
,
file
:
fileIdArr
,
});
return
res
.
json
(
postRes
);
}
}
}
...
...
@@ -73,88 +87,154 @@ export const createFileAndPost = asyncWrap(async (reqExp, res, next) => {
});
});
//Read
export
const
getAllPost
=
asyncWrap
(
async
(
req
,
res
)
=>
{
const
posts
=
await
postDb
.
getPosts
();
// console.log(posts);
return
res
.
json
(
posts
);
});
export
const
getFiles
=
asyncWrap
(
async
(
req
,
res
)
=>
{
const
{
postId
}
=
req
.
params
;
// console.log("나는 말하는 고구마.", postId);
const
files
=
await
postDb
.
getFilesByPostId
(
postId
);
return
res
.
json
(
files
);
});
//Update
export
const
addCounts
=
asyncWrap
(
async
(
req
,
res
)
=>
{
const
{
postId
}
=
req
.
params
;
const
{
counts
}
=
req
.
body
as
{
counts
:
number
;
};
// console.log(postId, counts);
const
updateCounts
=
await
postDb
.
addOneCount
(
postId
,
counts
);
return
res
.
json
(
updateCounts
);
});
export
const
userByPostId
=
(
reqExp
:
Request
,
res
:
Response
,
next
:
NextFunction
,
postId
:
string
)
=>
{
const
req
=
reqExp
as
TypedRequest
;
req
.
user
=
userDb
.
findUserByPostId
(
postId
);
next
();
};
export
const
updatePost
=
asyncWrap
(
async
(
reqExp
,
res
)
=>
{
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
string
}
>
;
export
const
getOnePost
=
asyncWrap
(
async
(
req
,
res
)
=>
{
const
userId
=
req
.
auth
.
userId
;
const
{
postId
}
=
req
.
params
;
const
post
=
await
postDb
.
getPost
(
postId
);
return
res
.
json
(
post
);
const
form
=
formidable
({
uploadDir
:
"
uploads
"
,
keepExtensions
:
true
,
multiples
:
true
,
});
const
fileIdArr
=
new
Array
();
const
oldSet
=
new
Set
();
const
newSet
=
new
Set
();
form
.
parse
(
req
,
async
(
err
,
fields
,
files
)
=>
{
if
(
!
Array
.
isArray
(
fields
.
title
))
{
const
title
=
fields
.
title
;
if
(
!
Array
.
isArray
(
fields
.
text
))
{
const
text
=
fields
.
text
;
if
(
!
Array
.
isArray
(
fields
.
theme
))
{
const
theme
=
fields
.
theme
;
if
(
!
Array
.
isArray
(
fields
.
city
))
{
const
city
=
fields
.
city
;
if
(
!
Array
.
isArray
(
fields
.
change
))
{
const
change
=
fields
.
change
;
const
oldFiles
=
await
postDb
.
getFilesByPostId
(
postId
);
if
(
!
(
oldFiles
===
undefined
))
{
for
(
var
i
=
0
;
(
i
=
oldFiles
.
length
);
i
++
)
{
const
oldFileName
=
postDb
.
getOriginalFileName
(
oldFiles
[
i
]);
if
(
!
(
oldFileName
===
undefined
))
{
oldSet
.
add
(
oldFileName
);
}
}
}
if
(
Array
.
isArray
(
files
.
picture
))
{
for
(
var
i
=
0
;
i
<
files
.
picture
.
length
;
i
++
)
{
const
newFileName
=
files
.
picture
?.[
i
].
originalFilename
;
if
(
!
(
newFileName
===
undefined
))
{
newSet
.
add
(
newFileName
);
}
}
}
const
deleteFiles
=
new
Array
();
const
addFiles
=
new
Array
();
oldSet
.
forEach
((
oldName
)
=>
{
newSet
.
forEach
((
newName
)
=>
{
if
(
!
(
oldName
===
newName
))
{
deleteFiles
.
push
(
oldName
);
addFiles
.
push
(
newName
);
}
});
});
for
(
var
i
=
0
;
i
<
deleteFiles
.
length
;
i
++
)
{
const
originalfilename
=
deleteFiles
[
i
];
const
delRes
=
await
postDb
.
deleteFileByName
(
originalfilename
);
}
if
(
Array
.
isArray
(
files
.
picture
))
{
for
(
var
i
=
0
;
i
<
files
.
picture
.
length
;
i
++
)
{
const
originalfilename
=
files
.
picture
?.[
i
].
originalFilename
;
const
newfilename
=
files
.
picture
?.[
i
].
newFilename
;
const
filepath
=
files
.
picture
?.[
i
].
filepath
;
for
(
var
i
=
0
;
i
<
addFiles
.
length
;
i
++
)
{
const
original
=
addFiles
[
i
];
if
(
original
===
originalfilename
)
{
const
addRes
=
await
postDb
.
createFilesRow
(
originalfilename
,
newfilename
,
filepath
);
fileIdArr
.
push
(
addRes
);
}
}
}
}
const
updateRes
=
await
postDb
.
updatedFileId
(
postId
);
const
fileId
=
fileIdArr
.
concat
(
updateRes
);
const
postRes
=
await
postDb
.
updatePostRow
(
{
title
,
text
,
theme
,
city
,
date
:
Date
.
now
(),
user
:
userId
,
file
:
fileId
,
},
postId
);
console
.
log
(
"
plzplzplzpllzplzlpzplzzplz
"
,
postRes
);
return
res
.
json
(
postRes
);
}
}
}
}
}
});
});
//Delete
export
const
deleteOnePost
=
asyncWrap
(
async
(
req
,
res
)
=>
{
const
{
postId
}
=
req
.
params
;
// console.log(postId);
const
deleteCount
=
await
postDb
.
deletePost
(
postId
);
const
deleteFileId
=
await
postDb
.
getFilesByPostId
(
postId
);
return
res
.
json
(
deleteCount
);
});
export
const
updatePost
=
asyncWrap
(
async
(
reqExp
,
res
)
=>
{
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
string
}
>
;
const
{
title
,
text
,
theme
,
city
,
date
}
=
req
.
body
as
{
title
:
string
;
text
:
string
;
theme
:
string
;
city
:
string
;
date
:
Date
;
counts
:
number
;
};
const
userId
=
req
.
auth
.
userId
;
const
{
postId
}
=
req
.
params
;
if
(
!
(
deleteFileId
===
undefined
))
{
for
(
var
i
=
0
;
i
<
deleteFileId
.
length
;
i
++
)
{
const
deleteId
=
deleteFileId
[
i
];
const
deleteFile
=
await
postDb
.
deleteFile
(
deleteId
);
}
}
const
updatePost
=
await
postDb
.
updateOnePost
(
{
title
,
text
,
theme
,
city
,
date
:
Date
.
now
(),
counts
:
req
.
body
.
counts
,
user
:
userId
,
},
postId
);
// console.log("게시글 수정 후", updatePost);
return
res
.
json
(
updatePost
);
return
res
.
json
(
deleteCount
);
});
src/db/mainimg.db.ts
View file @
d686ba4f
...
...
@@ -18,7 +18,7 @@ export const createMainimg = async (mainimg: MainimgType, pic: IFileInfo) => {
};
export
const
getMainimg
=
async
()
=>
{
const
img
=
await
Mainimg
.
find
({}).
populate
(
"
pic
"
);
const
img
=
await
Mainimg
.
find
({}).
populate
(
"
fileInfo
"
);
return
img
;
};
...
...
src/db/post.db.ts
View file @
d686ba4f
...
...
@@ -2,6 +2,7 @@ import { Types, ObjectId } from "mongoose";
import
{
Post
,
PostType
}
from
"
../models
"
;
import
{
FileInfo
,
IFileInfo
}
from
"
../models
"
;
//Create
export
const
createPostRow
=
async
(
post
:
PostType
)
=>
{
const
newPostRow
=
await
Post
.
create
({
title
:
post
.
title
,
...
...
@@ -30,6 +31,7 @@ export const createFilesRow = async (
return
newFileRow
.
_id
;
};
//Read
export
const
getPosts
=
async
()
=>
{
const
posts
=
await
Post
.
find
({}).
sort
({
date
:
-
1
});
return
posts
;
...
...
@@ -40,6 +42,7 @@ export const getFilesByPostId = async (postId: string) => {
return
files
?.
file
;
};
//Update
export
const
addOneCount
=
async
(
_id
:
string
,
counts
:
number
)
=>
{
const
newCounts
=
await
Post
.
findOneAndUpdate
(
{
_id
:
_id
},
...
...
@@ -49,29 +52,45 @@ export const addOneCount = async (_id: string, counts: number) => {
return
newCounts
;
};
export
const
getPost
=
async
(
_id
:
string
)
=>
{
const
post
=
await
Post
.
findOne
({
_id
:
_id
});
return
post
;
};
export
const
deletePost
=
async
(
_id
:
string
)
=>
{
const
res
=
await
Post
.
deleteOne
({
_id
:
_id
});
return
res
;
};
export
const
updateOnePost
=
async
(
post
:
PostType
,
_id
:
string
)
=>
{
export
const
updatePostRow
=
async
(
post
:
PostType
,
postId
:
string
)
=>
{
const
newPost
=
await
Post
.
findOneAndUpdate
(
{
_id
:
_i
d
},
{
_id
:
postI
d
},
{
title
:
post
.
title
,
text
:
post
.
text
,
theme
:
post
.
theme
,
city
:
post
.
city
,
date
:
post
.
date
,
counts
:
post
.
counts
,
user
:
post
.
user
,
file
:
post
.
file
,
},
{
new
:
true
}
);
return
newPost
;
};
export
const
getOriginalFileName
=
async
(
_id
:
Types
.
ObjectId
)
=>
{
const
file
=
await
FileInfo
.
findOne
({
_id
:
_id
});
return
file
?.
originalfilename
;
};
export
const
updatedFileId
=
async
(
_id
:
string
)
=>
{
const
updatedFile
=
await
Post
.
findOne
({
_id
:
_id
}).
populate
(
"
file
"
);
return
updatedFile
?.
file
;
};
//Delete
export
const
deletePost
=
async
(
_id
:
string
)
=>
{
const
res
=
await
Post
.
deleteOne
({
_id
:
_id
});
return
res
;
};
export
const
deleteFile
=
async
(
_id
:
Types
.
ObjectId
)
=>
{
const
deleteOne
=
await
FileInfo
.
deleteOne
({
_id
:
_id
});
return
deleteOne
;
};
export
const
deleteFileByName
=
async
(
originalfilename
:
string
)
=>
{
const
deleteFile
=
await
FileInfo
.
deleteOne
({
originalfilename
});
return
deleteFile
;
};
src/routes/post.route.ts
View file @
d686ba4f
...
...
@@ -12,7 +12,6 @@ router.route("/files/:postId").get(authCtrl.requireLogin, postCtrl.getFiles);
router
.
route
(
"
/:postId
"
)
.
post
(
authCtrl
.
requireLogin
,
postCtrl
.
addCounts
)
.
get
(
authCtrl
.
requireLogin
,
postCtrl
.
getOnePost
)
.
delete
(
authCtrl
.
requireLogin
,
postCtrl
.
deleteOnePost
)
// +authenticate
.
put
(
authCtrl
.
requireLogin
,
postCtrl
.
updatePost
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment