Skip to content

Commit

Permalink
Merge pull request #98 from xcjnzvc/react-강수정-5
Browse files Browse the repository at this point in the history
[강수정] sprint 5
  • Loading branch information
coldplay126 authored Oct 30, 2024
2 parents fd58012 + 5b46d29 commit b10fbc3
Show file tree
Hide file tree
Showing 64 changed files with 20,922 additions and 14 deletions.
Binary file added .DS_Store
Binary file not shown.
70 changes: 56 additions & 14 deletions .github/pull-request-template.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,68 @@

### 기본

- [x]
- []
- []
# 스프린트 미션 1 시안 확인

### 심화
- [ ] React와 같은 UI 라이브러리를 사용하지 않고 진행합니다.
- [ ] PC사이즈만 고려해 주어진 디자인으로 구현합니다.
- [ ] HTML, CSS 파일을 Netlify로 배포해 주세요. (참고: https://magenta-starburst-b50dbf.netlify.app)
- [ ] 랜딩 페이지의 url path는 루트(‘/’)로 설정합니다.
- [ ] title은 “판다마켓”로 설정합니다.
- [ ] “판다마켓” 로고 클릭 시 루트 페이지(‘/’)로 이동합니다.
- [ ] '로그인' 버튼 클릭 시 로그인 페이지(‘/login’)로 이동합니다 (빈 페이지)
- [ ] “구경하러 가기”버튼 클릭 시(’/items’)로 이동합니다. (빈 페이지)
- [ ] “Privacy Policy”, “FAQ”는 클릭 시 각각 Privacy 페이지(‘/privacy’), FAQ 페이지(‘/faq’)로 이동합니다.(모두 빈 페이지)
- [ ] 페이스북, 트위터, 유튜브, 인스타그램 아이콘을 클릭 시 각각의 홈페이지로 새로운 창이 열리면서 이동합니다.
- [ ] 아래로 스크롤해도 “판다 마켓” 로고와 “로그인” 버튼이 있는 상단 내비게이션 바(Global Navigation Bar)가 최상단에 고정되게 해 주세요.
- [ ] 화면의 너비가 1920px 이상이면 하늘색 배경색은 너비를 꽉 채우도록 채워지고, 내부 요소들의 위치는 고정되고, 여백만 커지도록 합니다.
- [ ]화면의 너비가 1920px 보다 작아질 때, “판다마켓” 로고의 왼쪽 여백 200px, “로그인" 버튼의 오른쪽 여백 200px이 유지되고, 화면의 너비가 작아질수록 두 요소 간 거리가 가까워지도록 설정합니다.
- [ ] 화면의 너비가 1920px 이상이면 내부에 있는 요소 간 동일한 간격을 유지하며 가운데 정렬해야 합니다.
- [ ] 화면의 너비가 1920px 보다 작아질 때, 최하단에 있는 “codeit-2024”의 왼쪽 여백 200px과 SNS 아이콘들의 오른쪽 여백 200px을 유지하면서 가운데 있는 “Privacy Policy”, “FAQ” 요소와 각각 동일한 간격을 유지하며 가까워져야 합니다.
- [ ] 클릭으로 기능이 동작해야 하는 경우, 사용자가 클릭할 수 있는 요소임을 알 수 있도록 CSS 속성 cursor: pointer로 설정합니다.

- [x]
- []
# 스프린트 미션 2 시안 확인

## 주요 변경사항
- [ ] README.md 파일을 작성해 주세요.
- [ ] 마크다운 언어를 숙지하여 작성해 주세요.
- [ ] 내용은 자유롭게 작성해 주세요.
- [ ] 본인 브랜치(ex)part1-홍길동)에 스프린트 미션을 업로드해 주세요.
- [ ] 적절한 커밋 메시지를 남겨 주세요.
- [ ] 1-Sprint-Mission 레포지토리를 fork 합니다.
- [ ] GitHub에 PR(Pull Request)을 생성해 upstream의 본인 브랜치(ex)part1-홍길동)에 미션을 제출합니다.
- [ ] PR 코멘트에 아래 내용들을 포함해 주세요.
- [ ] 스프린트 미션 요구사항 체크리스트
- [ ] 아래 예시 사진과 같이 완료한 만큼 체크 표시를 해 주세요. 참고
- [ ] 주요 변경사항
- [ ] 멘토님에게 남길 메시지
- [ ] Git 활용 과정에서 유닉스 커맨드를 활용해 주세요.
- [ ] HTML, CSS 파일을 Netlify로 배포합니다. (참고: https://www.codeit.kr/learn/5309)

-
-
로그인 페이지, 회원가입 페이지 공통

## 스크린샷
- [ ]“판다마켓" 로고 클릭 시 루트 페이지(“/”)로 이동합니다.
- [ ]로그인 페이지, 회원가입 페이지 모두 로고 위 상단 여백이 동일합니다.
- [ ]SNS 아이콘들은 클릭 시 각각 “https://www.google.com/”, “https://www.kakaocorp.com/page/” 으로 이동합니다.
- [ ]input 요소에 focus in 일 때, 테두리 색상은 ##3692FF입니다.
- [ ]input 요소에 focus out 일 때, 테두리는 없습니다.
로그인 페이지

- [ ]“회원가입”버튼 클릭 시 “/signup” 페이지로 이동합니다.
회원가입 페이지
- [ ]“로그인”버튼 클릭 시 “/login” 페이지로 이동합니다


### 심화 요구사항
공통

- [ ] reset.css를 설정해 주세요.
- [ ] 사용자의 브라우저 설정에 따라 기본 폰트 크기 설정이 변화함에 따라서 페이지의 요소 간 간격, 요소의 크기, font-size 등 모든 크기와 관련된 값이 크고 작아지도록 설정해 주세요.
이번 레슨은 어땠나요?
- [ ]palette에 있는 color값들을 css 변수로 등록해서 사용합니다.
- [ ]구글 애널리틱스로 방문자 수 확인하기 할 수 있도록 설정합니다.
로그인 페이지, 회원가입 페이지 공통
- [ ]비밀번호, 비밀번호 확인 input 요소 오른쪽에 비밀번호를 확인할 수 있는 눈 모양 아이콘을 추가합니다.

![image](이미지url)

## 멘토에게

-
-
- 셀프 코드 리뷰를 통해 질문 이어가겠습니다.
- 잘 부탁드립니다.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"liveServer.settings.port": 5501
}
Binary file added 판다마켓/.DS_Store
Binary file not shown.
19 changes: 19 additions & 0 deletions 판다마켓/api/common/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
export function responseInterceptor (response) {
if(response.status === 200 || response.status === 201 || response.status === 204) {
console.log('성공')
return response.json().then((res) => ({ isSuccess : true, status : response.status, data:res }));
} else {
console.log('실패')
return response.json().then((res) => ({ isSuccess : false, status : response.status, data:res }));
}

// return response.json().then((res) => ({ isSuccess :
// response.status === 200 || response.status === 201 || response.status === 204
// , status : response.status, data:res }));
}

export function handleError (error) {
console.log(error)
throw errors
}

3 changes: 3 additions & 0 deletions 판다마켓/api/common/constant.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@


export const apiUrl = "https://sprint-mission-api.vercel.app"
41 changes: 41 additions & 0 deletions 판다마켓/api/main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import { ArticleService } from "./services/ArticleService.js";
import { ProductService } from "./services/ProductService.js";




//articleservice
const getArticleList = await ArticleService.getArticleList(1, 10, "aa")
console.log(getArticleList)

const getArticle = await ArticleService.getArticle(2)
console.log(getArticle)

const createArticle = await ArticleService.createArticle('제목','내용2','sdf.jpg')
console.log(createArticle)

const patchArticle = await ArticleService.patchArticle('aaa','제목','내용2','sdf.jpg')
console.log(patchArticle)

const deleteArticle = await ArticleService.deleteArticle(764)
console.log(deleteArticle)




//productservice
const getProductList = await ProductService.getProductList(2, 2, "수정")
console.log(getProductList)

const getProduct = await ProductService.getProduct(2)
console.log(getProduct)

const createProduct = await ProductService.createProduct('수정','dd',123,'a',['asf'],['sef.jpg'])
console.log(createProduct)

const patchProduct = await ProductService.patchProduct(80, '수정', 'fff', '333', 'aaa', ['ssf'],['asf.jpg'])
console.log(patchProduct)

const deleteProduct = await ProductService.deleteProduct(370)
console.log(deleteProduct)

3 changes: 3 additions & 0 deletions 판다마켓/api/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"type" : "module"
}
98 changes: 98 additions & 0 deletions 판다마켓/api/services/ArticleService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
import { responseInterceptor, handleError } from "../common/common.js";
import { apiUrl } from "../common/constant.js";

/**
* 게시글 목록 조회
*
* @param page 페이지
* @param pageSize 페이지당 몇개 올 지
* @param keyword 키워드
*/
function getArticleList(page, pageSize, keyword){
return fetch(`${apiUrl}/articles?page=${page}&pageSize=${pageSize}&keyword=${keyword}`)
.then((response) => responseInterceptor(response))
.catch((error) => handleError(error))
}

async function getArticle(id){

return fetch(`https://sprint-mission-api.vercel.app/articles/${id}`, {
method : 'GET',
headers : {
'Content-Type' : 'application/json',
}
})
.then((response) => responseInterceptor(response))
.catch((error) => handleError(error))

// .then(function(response){
// return responseInterceptor(response)
// })


}

/**
* 게시글생성
*
* @param title 제목
* @param content 내용
* @param img 이미지 링크
*/
function createArticle(title, content, img) {

if (!title || !content || !img) return false;
const requestBody = {
title : title,
content : content,
image : img
}
return fetch('https://sprint-mission-api.vercel.app/articles', {
method : 'POST',
body : JSON.stringify(requestBody),
headers : {
'Content-Type' : 'application/json',
}
})
.then((response) => responseInterceptor(response))
.catch((error) => handleError(error))
}

function patchArticle(id, title, content, img) {
const requestBody = {
title : title,
content : content,
image : img
}

return fetch(`https://sprint-mission-api.vercel.app/articles/${id}`, {
method : 'PATCH',
body : JSON.stringify(requestBody),
headers : {
'Content-Type' : 'application/json',
}
})
.then((response) => responseInterceptor(response))
.catch((error) => handleError(error))

}

function deleteArticle(id) {
return fetch(`https://sprint-mission-api.vercel.app/articles/${id}`, {
method : 'DELETE',
headers : {
'Content-Type' : 'application/json',
},
})
.then((response) => responseInterceptor(response))
.catch((error) => handleError(error))
}

export const ArticleService = {
getArticleList,
getArticle,
createArticle,
patchArticle,
deleteArticle
}

136 changes: 136 additions & 0 deletions 판다마켓/api/services/ProductService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
// import { responseInterceptor, handleError } from "../common/common.js";
import { apiUrl } from "../common/constant.js";



async function getProductList(page, pageSize, keyword){
try {

const requestBody = {
page : page,
pageSize : pageSize,
keyword : keyword
}

const response = await fetch(`${apiUrl}/products?page=${page}&pageSize=${pageSize}&keyword=${keyword}`)
const data = await response.json()

if(response.status === 200 || response.status === 201 || response.status === 204) {
console.log('성공')
}
return {
isSuccess : true,
status : response.status,
data : data
}
} catch(err) {
console.log('이게 에러임', err)
return "err catch"
}
}

async function getProduct(id){
try{
const response = await fetch(`${apiUrl}/products/${id}`)

const data = await response.json()
return {
isSuccess : true,
status : response.status,
data : data
}
} catch(err) {
console.log('이게 에러임', err)
return "err catch"
}
}

async function createProduct(name, description, price, manufacturer, tags, images){
try{
const requestBody = {
name : name,
description : description,
price : price,
manufacturer : manufacturer,
tags: tags,
images: images
}

const response = await fetch(`${apiUrl}/products`, {
method : 'POST',
body : JSON.stringify(requestBody),
headers : {
'Content-Type' : 'application/json',
}
})

const data = await response.json()
return {
isSuccess : true,
status : response.status,
data : data
}
} catch(err) {
console.log('이게 에러임', err)
return "err catch"
}
}

async function patchProduct(id, name, description, price, tags, images){
try{
const requestBody = {
"name": name,
"description": description,
"price": price,
"tags": tags,
"images": images
}

const response = await fetch(`${apiUrl}/products/${id}`,{
method : 'PATCH',
body : JSON.stringify(requestBody),
headers : {
'Content-Type' : 'application/json',
}
})
const data = await response.json()
return {
isSuccess : true,
status : response.status,
data : data
}
} catch(err) {
console.log('이게 에러임', err)
return "err catch"
}
}

async function deleteProduct(id){
const response = await fetch(`${apiUrl}/products/${id}`, {
method : 'DELETE',
headers : {
'Content-Type' : 'application/json',
}
})
if (response.status === 204) {
return {
isSuccess : true,
status : response.status,
data : null
}
} else {
return {
isSuccess : false,
status : response.status,
data : null
}
}
}

export const ProductService = {
getProductList,
getProduct,
createProduct,
patchProduct,
deleteProduct
}
Binary file added 판다마켓/img/.DS_Store
Binary file not shown.
Binary file added 판다마켓/img/Component 2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 판다마켓/img/Component 3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 판다마켓/img/Group 19.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 판다마켓/img/Vector.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 판다마켓/img/bottom-banner-image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added 판다마켓/img/btn_hidden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit b10fbc3

Please sign in to comment.