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
715ce2d9
Commit
715ce2d9
authored
Jul 23, 2022
by
Lee Soobeom
Browse files
posting css
parent
1bc1c778
Changes
7
Hide whitespace changes
Inline
Side-by-side
frontend/src/board/board.tsx
View file @
715ce2d9
...
...
@@ -37,22 +37,22 @@ export default function BoardPage() {
return
(
<
div
className
=
"flex flex-col items-center"
>
<
div
className
=
"flex flex-col items-center mt-6"
>
<
div
className
=
"flex flex-col
w-10/12
items-center mt-6"
>
<
div
>
`Travel Report's Board`
</
div
>
<
div
>
`여행지 후기를 남겨주세요!`
</
div
>
</
div
>
<
div
className
=
"flex flex-col w-10/12 mt-16"
>
<
div
className
=
"flex justify-end"
>
<
div
className
=
"border-2 mb-2"
>
<
div
className
=
"border-2
border-blue-500 rounded
mb-2"
>
<
Link
to
=
"/posting"
>
<
button
>
글쓰기
+
</
button
>
<
button
>
글쓰기
</
button
>
</
Link
>
</
div
>
{
"
"
}
{
/* Link */
}
</
div
>
<
div
className
=
"sm:overflow-y-scroll"
>
<
div
className
=
"flex flex-row divide-x-2 border-2 border-solid b
g-sky-300 b
order-y-2 h-10 "
>
<
div
className
=
"flex flex-row divide-x-2 border-2 border-solid border-y-2 h-1
0 bg-gradient-to-r from-cyan-500 to-blue-50
0 "
>
<
div
className
=
"basis-full"
>
Title
</
div
>
<
div
className
=
"basis-3/12"
>
Date
</
div
>
<
div
className
=
"basis-2/12"
>
Clicks
</
div
>
...
...
frontend/src/post/editpost.tsx
View file @
715ce2d9
...
...
@@ -108,75 +108,99 @@ export function EditPost() {
};
return
(
<
div
className
=
"flex flex-col border-3"
>
<
form
onSubmit
=
{
reWriteSubmit
}
className
=
"w-full items-center"
>
<
div
className
=
"flex flex-row relative"
>
<
p
className
=
"basis-1/12 gap-x-8"
>
Id
</
p
>
<
p
className
=
"basis-8/12 invisible"
>
empty
</
p
>
<
select
name
=
"city"
className
=
"border border-3 border-black w-1/12"
onChange
=
{
cityChange
}
defaultValue
=
{
post
.
city
}
>
<
option
value
=
"city"
>
도시
</
option
>
<
option
value
=
"Seoul"
>
서울
</
option
>
<
option
value
=
"Busan"
>
부산
</
option
>
<
option
value
=
"Incheon"
>
인천
</
option
>
<
option
value
=
"Daegoo"
>
대구
</
option
>
<
option
value
=
"Kwangjoo"
>
광주
</
option
>
<
option
value
=
"Daejeon"
>
대전
</
option
>
<
option
value
=
"Woolsan"
>
울산
</
option
>
<
option
value
=
"Sejong"
>
세종
</
option
>
<
option
value
=
"Dokdo"
>
독도
</
option
>
<
option
value
=
"Jeju"
>
제주
</
option
>
</
select
>
<
select
name
=
"theme"
className
=
"border border-3 border-black w-1/12"
onChange
=
{
themeChange
}
defaultValue
=
{
post
.
theme
}
>
<
option
value
=
"theme"
>
테마
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
<
option
value
=
"surfing"
>
서핑
</
option
>
<
option
value
=
"activity"
>
액티비티
</
option
>
<
option
value
=
"camping"
>
캠핑
</
option
>
<
option
value
=
"sking"
>
스키
</
option
>
<
option
value
=
"boat"
>
보트
</
option
>
<
option
value
=
"desert"
>
사막
</
option
>
<
option
value
=
"golf"
>
골프
</
option
>
<
option
value
=
"cave"
>
동굴
</
option
>
<
option
value
=
"history"
>
문화재
</
option
>
<
option
value
=
"zoo"
>
동물원
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
</
select
>
<
button
type
=
"submit"
className
=
"border border-black basis-1/12 gap-x-8"
>
Rewrite
</
button
>
<
div
className
=
"flex place-content-center"
>
<
form
onSubmit
=
{
reWriteSubmit
}
className
=
"flex flex-col w-96 items-center"
>
<
div
className
=
"flex flex-row h-8 gap-x-1"
>
<
div
className
=
"flex border-2 border-sky-400 rounded-full w-20 place-content-center transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-gray-300 duration-300"
>
<
input
id
=
"files"
type
=
"file"
multiple
// onChange={handleInputPic}
className
=
"hidden"
/>
<
label
htmlFor
=
"files"
className
=
"text-xs mt-1.5 ml-1 "
>
파일 선택
</
label
>
</
div
>
<
div
className
=
"flex w-20"
>
<
select
name
=
"city"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs"
onChange
=
{
cityChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
도시
</
option
>
<
option
value
=
"Seoul"
>
서울
</
option
>
<
option
value
=
"Busan"
>
부산
</
option
>
<
option
value
=
"Incheon"
>
인천
</
option
>
<
option
value
=
"Daegoo"
>
대구
</
option
>
<
option
value
=
"Kwangjoo"
>
광주
</
option
>
<
option
value
=
"Daejeon"
>
대전
</
option
>
<
option
value
=
"Woolsan"
>
울산
</
option
>
<
option
value
=
"Sejong"
>
세종
</
option
>
<
option
value
=
"Dokdo"
>
독도
</
option
>
<
option
value
=
"Jeju"
>
제주
</
option
>
</
select
>
</
div
>
<
div
className
=
"flex w-20"
>
<
select
name
=
"theme"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs"
onChange
=
{
themeChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
테마
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
<
option
value
=
"surfing"
>
서핑
</
option
>
<
option
value
=
"activity"
>
액티비티
</
option
>
<
option
value
=
"camping"
>
캠핑
</
option
>
<
option
value
=
"sking"
>
스키
</
option
>
<
option
value
=
"boat"
>
보트
</
option
>
<
option
value
=
"desert"
>
사막
</
option
>
<
option
value
=
"golf"
>
골프
</
option
>
<
option
value
=
"cave"
>
동굴
</
option
>
<
option
value
=
"history"
>
문화재
</
option
>
<
option
value
=
"zoo"
>
동물원
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
</
select
>
</
div
>
<
div
className
=
"flex w-20"
>
<
button
type
=
"submit"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs text-center transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-sky-300 duration-300"
>
글쓰기
</
button
>
</
div
>
</
div
>
<
div
className
=
"flex
border-4
"
>
<
div
className
=
"flex
flex-col
"
>
<
textarea
name
=
"title"
onChange
=
{
titleChange
}
placeholder
=
"title"
className
=
"w-full h-8"
defaultValue
=
{
post
.
title
}
></
textarea
>
</
div
>
<
div
className
=
"flex border-2"
>
placeholder
=
"제목을 입력해 주세요!"
className
=
"flex w-96 border-2 border-sky-500 rounded"
/>
<
div
className
=
"flex flex-col mt-1 mb-1"
>
<
div
className
=
"flex gap-x-2 h-48 overflow-x-scroll"
>
{
/* {imgSrc?.map((img, i) => (
<img key={i} src={img} width={200} height={200} />
))} */
}
</
div
>
</
div
>
<
textarea
onChange
=
{
textChange
}
name
=
"text"
placeholder
=
"text"
className
=
"w-full h-96"
defaultValue
=
{
post
.
text
}
></
textarea
>
placeholder
=
"여행 후기를 알려주세요!"
className
=
"flex w-96 h-96 border-2 border-sky-500 rounded"
/>
</
div
>
</
form
>
</
div
>
...
...
frontend/src/post/intopost.tsx
View file @
715ce2d9
...
...
@@ -24,37 +24,43 @@ export function IntoPost() {
<
div
>
<
div
>
<
div
>
<
div
className
=
"flex flex-row basis-8 gap-x-1"
>
<
div
className
=
"border-2 border-sky-300 border-current rounded"
>
<
button
id
=
{
post
.
_id
}
onClick
=
{
handleDeleteClick
}
>
<
div
className
=
"flex flex-row h-8 gap-x-1 place-content-end"
>
<
div
className
=
"w-8"
>
<
button
id
=
{
post
.
_id
}
onClick
=
{
handleDeleteClick
}
className
=
"border-2 border-sky-300 rounded-full h-8 w-8 text-xs text-center transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-red-300 duration-300"
>
삭제
</
button
>
</
div
>
<
div
className
=
"
border-2 border-sky-300 border-current rounded
"
>
<
div
className
=
"
w-8
"
>
<
Link
to
=
"/edit"
state
=
{
post
}
>
<
button
>
수정
</
button
>
<
button
className
=
"border-2 border-sky-300 rounded-full h-8 w-8 text-xs transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-sky-300 duration-300"
>
수정
</
button
>
</
Link
>
</
div
>
</
div
>
<
div
className
=
"flex flex-row gap-x-1"
>
<
div
className
=
"flex basis-3/
4
border-2 border-sky-300 rounded"
>
<
div
className
=
"flex flex-row
h-8
gap-x-1
place-content-between
"
>
<
div
className
=
"flex basis-3/
6
border-2 border-sky-300 rounded"
>
제목:
{
post
.
title
}
</
div
>
<
div
className
=
"flex basis-
1/4
border-2 border-sky-300 rounded"
>
<
div
className
=
"flex basis-
2/6
border-2 border-sky-300 rounded"
>
작성자:
{
post
.
user
}
</
div
>
<
div
className
=
"flex basis-2/6 border-2 border-sky-300 rounded"
>
작성일:
{
post
.
date
}
</
div
>
</
div
>
<
div
className
=
"flex flex-row gap-x-1"
>
<
div
className
=
"flex basis-1/
4
border-2 border-sky-300 rounded"
>
<
div
className
=
"flex flex-row
h-8
gap-x-1
place-content-start
"
>
<
div
className
=
"flex basis-1/
6
border-2 border-sky-300 rounded"
>
도시:
{
post
.
city
}
</
div
>
<
div
className
=
"flex basis-1/
4
border-2 border-sky-300 rounded"
>
<
div
className
=
"flex basis-1/
6
border-2 border-sky-300 rounded"
>
테마:
{
post
.
theme
}
</
div
>
<
div
className
=
"flex basis-1/4 border-2 border-sky-300 rounded"
>
작성일:
{
post
.
date
}
</
div
>
<
div
className
=
"flex basis-1/4 border-2 border-sky-300 rounded"
>
<
div
className
=
"flex basis-1/6 border-2 border-sky-300 rounded"
>
조회수:
{
post
.
counts
}
</
div
>
</
div
>
...
...
frontend/src/post/posting.tsx
View file @
715ce2d9
...
...
@@ -60,7 +60,8 @@ export default function Posting() {
if
(
postingFormMatch
(
user
))
{
setLoading
(
true
);
if
(
file
)
{
sendImg2Db
(
file
);
const
res
=
sendImg2Db
(
file
);
console
.
log
(
res
);
}
// const res = await postApi.posting(user);
// console.log("서버연결됬나요", res);
...
...
@@ -153,83 +154,99 @@ export default function Posting() {
};
return
(
<
div
className
=
"flex flex-col border-3 "
>
<
form
onSubmit
=
{
handlePostSubmit
}
className
=
"w-full items-center"
>
<
div
className
=
"flex flex-row relative"
>
<
p
className
=
"basis-1/12 gap-x-8"
>
Id
</
p
>
<
p
className
=
"basis-6/12 invisible"
>
empty
</
p
>
<
div
className
=
"basis-2/12 border-2 border-sky-300"
>
<
input
type
=
"file"
multiple
onChange
=
{
handleInputPic
}
/>
<
div
className
=
"flex place-content-center"
>
<
form
onSubmit
=
{
handlePostSubmit
}
className
=
"flex flex-col w-96 items-center"
>
<
div
className
=
"flex flex-row h-8 gap-x-1"
>
<
div
className
=
"flex border-2 border-sky-400 rounded-full w-20 place-content-center transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-gray-300 duration-300"
>
<
input
id
=
"files"
type
=
"file"
multiple
onChange
=
{
handleInputPic
}
className
=
"hidden"
/>
<
label
htmlFor
=
"files"
className
=
"text-xs text-center mt-1.5 ml-1 "
>
파일 선택
</
label
>
</
div
>
<
div
className
=
"flex w-20"
>
<
select
name
=
"city"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs"
onChange
=
{
cityChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
도시
</
option
>
<
option
value
=
"Seoul"
>
서울
</
option
>
<
option
value
=
"Busan"
>
부산
</
option
>
<
option
value
=
"Incheon"
>
인천
</
option
>
<
option
value
=
"Daegoo"
>
대구
</
option
>
<
option
value
=
"Kwangjoo"
>
광주
</
option
>
<
option
value
=
"Daejeon"
>
대전
</
option
>
<
option
value
=
"Woolsan"
>
울산
</
option
>
<
option
value
=
"Sejong"
>
세종
</
option
>
<
option
value
=
"Dokdo"
>
독도
</
option
>
<
option
value
=
"Jeju"
>
제주
</
option
>
</
select
>
</
div
>
<
div
className
=
"flex w-20"
>
<
select
name
=
"theme"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs"
onChange
=
{
themeChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
테마
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
<
option
value
=
"surfing"
>
서핑
</
option
>
<
option
value
=
"activity"
>
액티비티
</
option
>
<
option
value
=
"camping"
>
캠핑
</
option
>
<
option
value
=
"sking"
>
스키
</
option
>
<
option
value
=
"boat"
>
보트
</
option
>
<
option
value
=
"desert"
>
사막
</
option
>
<
option
value
=
"golf"
>
골프
</
option
>
<
option
value
=
"cave"
>
동굴
</
option
>
<
option
value
=
"history"
>
문화재
</
option
>
<
option
value
=
"zoo"
>
동물원
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
</
select
>
</
div
>
<
div
className
=
"flex w-20"
>
<
button
type
=
"submit"
className
=
"border-2 border-sky-400 rounded-full w-20 text-xs text-center transition ease-in-out delay-150 bg-white-400 hover:-translate-y-1 hover:scale-110 hover:bg-sky-300 duration-300"
>
글쓰기
</
button
>
</
div
>
<
select
name
=
"city"
id
=
"Questions"
className
=
"border-2 border-sky-300 w-1/12"
onChange
=
{
cityChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
도시
</
option
>
<
option
value
=
"Seoul"
>
서울
</
option
>
<
option
value
=
"Busan"
>
부산
</
option
>
<
option
value
=
"Incheon"
>
인천
</
option
>
<
option
value
=
"Daegoo"
>
대구
</
option
>
<
option
value
=
"Kwangjoo"
>
광주
</
option
>
<
option
value
=
"Daejeon"
>
대전
</
option
>
<
option
value
=
"Woolsan"
>
울산
</
option
>
<
option
value
=
"Sejong"
>
세종
</
option
>
<
option
value
=
"Dokdo"
>
독도
</
option
>
<
option
value
=
"Jeju"
>
제주
</
option
>
</
select
>
<
select
name
=
"theme"
id
=
"Questions"
className
=
"border-2 border-sky-300 w-1/12"
onChange
=
{
themeChange
}
defaultValue
=
"질문종류"
>
<
option
value
=
"질문종류"
>
테마
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
<
option
value
=
"surfing"
>
서핑
</
option
>
<
option
value
=
"activity"
>
액티비티
</
option
>
<
option
value
=
"camping"
>
캠핑
</
option
>
<
option
value
=
"sking"
>
스키
</
option
>
<
option
value
=
"boat"
>
보트
</
option
>
<
option
value
=
"desert"
>
사막
</
option
>
<
option
value
=
"golf"
>
골프
</
option
>
<
option
value
=
"cave"
>
동굴
</
option
>
<
option
value
=
"history"
>
문화재
</
option
>
<
option
value
=
"zoo"
>
동물원
</
option
>
<
option
value
=
"cycling"
>
사이클링
</
option
>
</
select
>
<
button
type
=
"submit"
className
=
"border-2 border-sky-300 basis-1/12 gap-x-8"
>
글쓰기
</
button
>
</
div
>
<
div
className
=
"flex"
>
<
div
className
=
"flex
flex-col
"
>
<
textarea
name
=
"title"
onChange
=
{
titleChange
}
placeholder
=
"
title
"
className
=
"
w-full h-8
border-2 border-sky-
3
00"
></
textarea
>
</
div
>
<
div
className
=
"flex
flex-co
l"
>
<
div
className
=
"flex h-48 overflow-x-scroll"
>
{
imgSrc
?.
map
((
img
,
i
)
=>
(
<
img
key
=
{
i
}
src
=
{
img
}
width
=
{
200
}
height
=
{
200
}
/>
))
}
placeholder
=
"
제목을 입력해 주세요!
"
className
=
"
flex w-96
border-2 border-sky-
5
00
rounded
"
/
>
<
div
className
=
"flex flex-col mt-1 mb-1"
>
<
div
className
=
"flex
gap-x-2 h-48 overflow-x-scrol
l"
>
{
imgSrc
?.
map
((
img
,
i
)
=>
(
<
img
key
=
{
i
}
src
=
{
img
}
width
=
{
200
}
height
=
{
200
}
/>
))
}
</
div
>
</
div
>
<
textarea
onChange
=
{
textChange
}
name
=
"text"
placeholder
=
"
text
"
className
=
"
w-full
h-96 border-2 border-sky-
3
00"
></
textarea
>
placeholder
=
"
여행 후기를 알려주세요!
"
className
=
"
flex w-96
h-96 border-2 border-sky-
5
00
rounded
"
/
>
</
div
>
</
form
>
</
div
>
...
...
src/controllers/post.controller.ts
View file @
715ce2d9
...
...
@@ -7,10 +7,6 @@ import { TypedRequest } from "../types";
export
const
createImgAndPost
=
asyncWrap
(
async
(
reqExp
,
res
,
next
)
=>
{
const
req
=
reqExp
as
TypedRequestAuth
<
{
userId
:
string
}
>
;
// const { date, counts } = req.body as {
// date: "";
// counts: 0;
// };
const
{
userId
}
=
req
.
auth
;
...
...
@@ -20,43 +16,43 @@ export const createImgAndPost = asyncWrap(async (reqExp, res, next) => {
multiples
:
true
,
});
const
fileIdArr
=
new
Array
();
form
.
parse
(
req
,
(
err
,
fields
,
files
)
=>
{
const
title
=
fields
.
title
?.[
0
];
const
text
=
fields
.
text
?.[
0
];
const
theme
=
fields
.
theme
?.[
0
];
const
city
=
fields
.
city
?.[
0
];
if
(
Array
.
isArray
(
files
.
picture
))
{
for
(
var
i
=
0
;
i
<
files
.
picture
.
length
;
i
++
)
{
if
(
!
(
files
.
picture
?.[
i
].
originalFilename
===
null
))
{
const
originalfilename
=
files
.
picture
?.[
i
].
originalFilename
;
const
newfilename
=
files
.
picture
?.[
i
].
newFilename
;
const
filepath
=
files
.
picture
?.[
i
].
filepath
;
const
filesRes
=
postDb
.
createFilesRow
(
originalfilename
,
newfilename
,
filepath
);
const
originalfilename
=
files
.
picture
?.[
i
].
originalFilename
;
const
newfilename
=
files
.
picture
?.[
i
].
newFilename
;
const
filepath
=
files
.
picture
?.[
i
].
filepath
;
const
filesRes
=
postDb
.
createFilesRow
(
originalfilename
,
newfilename
,
filepath
);
}
}
// create fileinfos row
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
;
const
postRes
=
postDb
.
createPostRow
({
title
,
text
,
theme
,
city
,
date
:
Date
.
now
(),
counts
:
0
,
user
:
userId
,
});
// create posts
}
}
}
}
else
{
console
.
log
(
"
업로드한 사진이 없습니다.
"
);
}
const
postRes
=
postDb
.
createPostRow
({
title
,
text
,
theme
,
city
,
date
:
Date
.
now
(),
counts
:
0
,
user
:
userId
,
});
console
.
log
(
"
createPostRow
"
,
postRes
);
});
});
...
...
src/db/post.db.ts
View file @
715ce2d9
...
...
@@ -28,6 +28,11 @@ export const createFilesRow = async (
return
newFileRow
;
};
export
const
findFile
=
async
(
postId
:
string
)
=>
{
const
fileInfo
=
await
Post
.
findById
({
postId
}).
populate
(
"
file
"
);
return
fileInfo
;
};
export
const
findFileByPostInfo
=
async
(
title
:
string
,
usreId
:
string
)
=>
{
const
posts
=
await
Post
.
find
({
title
:
title
,
userId
:
usreId
});
return
posts
;
...
...
src/db/user.db.ts
View file @
715ce2d9
...
...
@@ -102,7 +102,7 @@ export const postPicture = async (
}
};
export
const
deleteUser
=
async
(
userId
:
string
)
=>
{
export
const
deleteUser
=
async
(
userId
:
ObjectId
)
=>
{
const
user
=
await
User
.
findById
(
userId
);
if
(
user
&&
user
.
avatar
)
{
const
file
=
await
FileInfo
.
findById
(
user
.
avatar
.
_id
);
...
...
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