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

v1.2.1 업데이트 #88

Merged
merged 99 commits into from
Nov 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
7ccba72
FU-58 chore: set project and basic tools (#1)
eujin-shin Jul 11, 2024
fc45410
[FU-53] feat: connect kakao OAuth (#2)
eujin-shin Jul 17, 2024
d3f96f1
[FU-76] feat: construct header layout at photographer page (#5)
eujin-shin Jul 26, 2024
e4fdf91
[FU-84] feat: set api request core (#3)
eujin-shin Jul 26, 2024
f8a2691
[FU-74] feat: add product create form (#4)
eujin-shin Jul 26, 2024
769cdf2
[FU-81] feat: add product list at mypage (#6)
eujin-shin Aug 1, 2024
4586dce
[FU-103] feat: add customer products page (#7)
eujin-shin Aug 6, 2024
0861526
[FU-80] feat: set photographer mypage layout (#8)
eujin-shin Aug 8, 2024
23a4bac
[FU-128] feat: add token based authentication (#10)
eujin-shin Aug 9, 2024
83e7f27
[FU-75] feat: post new product (#9)
eujin-shin Aug 13, 2024
0051302
[FU-106] feat: create reservation (#11)
eujin-shin Aug 15, 2024
d25941e
[FU-129] feat: add product list and details page (#12)
eujin-shin Aug 19, 2024
d13499f
[FU-152] feat: publish prototype version (#13)
eujin-shin Aug 27, 2024
30a00cb
[FU-155] feat: client side token management (#15)
eujin-shin Sep 1, 2024
5ea85ed
[FU-180] create ci workflow (#18)
yuseok0215 Sep 2, 2024
c496bc1
[FU-158] feat: previous feature complement (#19)
eujin-shin Sep 5, 2024
c16851f
[FU-120] feat: add photographer reservation list (#20)
eujin-shin Sep 5, 2024
03bc752
[FU-157] feat: validate form about product and reservation (#16)
eujin-shin Sep 10, 2024
c151ab6
[FU-114] feat: add reservation details page (#21)
eujin-shin Sep 10, 2024
915f896
[FU-200] feat: add logout (#24)
eujin-shin Sep 13, 2024
84b7dda
[FU-184] feat: view photographer profile at customer side (#22)
eujin-shin Sep 13, 2024
d6177bf
[FU-185] feat: edit photographer profile (#25)
eujin-shin Sep 19, 2024
25b9c37
[FU-117] feat: view reservation details at customer side (#23)
eujin-shin Sep 19, 2024
43df878
[FU-178] feat: add photographer join page (#26)
eujin-shin Sep 19, 2024
c47d08d
[FU-204] feat: cancel reservation at customer side (#27)
eujin-shin Sep 20, 2024
29bc9ad
[FU-222] fix: use formdata at request registering new images (#29)
eujin-shin Sep 23, 2024
2effae1
[FU-220] feat: add service footer (#31)
eujin-shin Sep 25, 2024
24b5d3a
[FU-234] fix: keep userdata after login (#32)
eujin-shin Sep 25, 2024
6dcb186
[FU-235] 서버 배포 자동화 (#30)
yuseok0215 Sep 25, 2024
3751410
[FU-255] feat: replace photographerId with profileName (#33)
eujin-shin Sep 25, 2024
3da702b
FU-235 feat: start.sh 수정
yuseok0215 Sep 25, 2024
e2ea511
chore: add ecosystem
eujin-shin Sep 25, 2024
7ea4991
[FU-258] 배포 자동화 스크립트 버그 픽스 (#34)
yuseok0215 Sep 26, 2024
aacf3df
[FU-259] fix: set request content type (#35)
eujin-shin Sep 26, 2024
f41ed73
[FU-263] feat: add agreements (#38)
eujin-shin Sep 27, 2024
1a49640
[FU-221] feat: connect google analytics (#39)
eujin-shin Sep 30, 2024
c3f321c
[FU-225] feat: set metadata (#36)
eujin-shin Sep 30, 2024
de4259d
[FU-247] feat: common error handling (#40)
eujin-shin Sep 30, 2024
dd725e8
[FU-218] feat: product manage (#37)
eujin-shin Oct 1, 2024
70789c0
[FU-205] feat: view previous reservation list (#28)
eujin-shin Oct 1, 2024
25f9d8b
[FU-266] fix: bug fix (#41)
eujin-shin Oct 2, 2024
838d4e7
[FU-261] feat: adjust fields of product and reservation (#42)
eujin-shin Oct 7, 2024
83a4ae0
[FU-273] fix: clean old files before install (#44)
eujin-shin Oct 7, 2024
4eb235a
[FU-262] feat: redirect by middleware (#43)
eujin-shin Oct 7, 2024
1ec4981
[FU-271] feat: user modify (#45)
eujin-shin Oct 8, 2024
1d9bc83
[FU-288] fix: user role setting (#46)
eujin-shin Oct 8, 2024
92e47cd
[FU-238] feat: connect sentry (#47)
eujin-shin Oct 9, 2024
a598adc
[FU-286] feat: filter reservation with product (#48)
eujin-shin Oct 9, 2024
ad49d98
[FU-292] feat: write memo at reservation detail page (#51)
eujin-shin Oct 10, 2024
bf4cdc3
[FU-250] feat: leave service (#50)
eujin-shin Oct 10, 2024
fa9697c
[FU-290] feat: add photographer contact (#49)
eujin-shin Oct 11, 2024
31cec02
[FU-297] feat: add page at root url (#53)
eujin-shin Oct 11, 2024
b4dedee
[FU-298] fix: request for reservations (#54)
eujin-shin Oct 11, 2024
a33bd59
[FU-280] feat: add notice for product (#52)
eujin-shin Oct 15, 2024
444c23f
[FU-291] feat: add shooting place (#55)
eujin-shin Oct 15, 2024
142d899
[FU-244] chore: set front server infra (#58)
yuseok0215 Oct 17, 2024
aab6cde
[FU-296] feat: enhance launching version UI (#56)
eujin-shin Oct 17, 2024
5b6e0cb
[FU-308] feat: send login event to google analytics (#59)
eujin-shin Oct 17, 2024
27b6470
feat: add develop cd workflow trigger event
eujin-shin Oct 21, 2024
3983f7f
Revert "feat: add develop cd workflow trigger event"
eujin-shin Oct 21, 2024
b76dc08
v1.0.0 업데이트 (#61)
eujin-shin Oct 21, 2024
3009f2c
[FU-219] feat: add service tutorial and sidebar (#64)
eujin-shin Oct 22, 2024
7d37612
[FU-310] fix: refresh value after reservation status changed (#65)
eujin-shin Oct 24, 2024
ff267c9
[FU-312] fix: token expiration handler (#66)
eujin-shin Oct 24, 2024
2ac4c12
[FU-311] feat: UI enhancement (#67)
eujin-shin Oct 25, 2024
2b71f40
[FU-219] feat: add service tutorial and sidebar (#64)
eujin-shin Oct 22, 2024
607a7c1
[FU-310] fix: refresh value after reservation status changed (#65)
eujin-shin Oct 24, 2024
454626d
[FU-312] fix: token expiration handler (#66)
eujin-shin Oct 24, 2024
3bd203c
[FU-311] feat: UI enhancement (#67)
eujin-shin Oct 25, 2024
a12d3eb
feat: change banner styles at join page
eujin-shin Oct 25, 2024
c154b38
feat: fix styles and information texts
eujin-shin Oct 25, 2024
8a40161
feat: access to tutorial at any page
eujin-shin Oct 25, 2024
1fa64d2
chore: solve conflict with master branch
eujin-shin Oct 27, 2024
c7397f4
chore: fix build error from deprecated pages
eujin-shin Oct 27, 2024
24eac19
Merge branch 'develop' into release/v1.1.0
eujin-shin Oct 29, 2024
d38654d
v1.1.0 업데이트 (#70)
eujin-shin Oct 29, 2024
52d8d30
[FU-333] feat: UI enhancement (#72)
eujin-shin Nov 2, 2024
b4767ec
Merge branch 'release/v.1.1.1' into develop
eujin-shin Nov 2, 2024
5f6e265
v1.1.1 QA 진행 (#73)
eujin-shin Nov 2, 2024
0e73dcc
Merge branch 'master' into release/v.1.1.1
eujin-shin Nov 2, 2024
6bc8ad6
v.1.1.1 업데이트 (#75)
eujin-shin Nov 3, 2024
5f61ed7
[FU-336] image file size (#76)
eujin-shin Nov 3, 2024
bc52ce6
[FU-324] feat: add custom error messages (#71)
eujin-shin Nov 5, 2024
b9b2c18
[FU-337] feat: improve mobile usability (#80)
eujin-shin Nov 5, 2024
7f50ed2
[FU-319] feat: add customed google analytics events (#78)
eujin-shin Nov 5, 2024
1c28a42
[FU-338] feat: reconfig Sentry (#81)
eujin-shin Nov 5, 2024
3e7bec4
[FU-272] feat: enhance user interaction (#79)
eujin-shin Nov 5, 2024
87cc06a
Merge branch 'release/v1.2.0' into develop
eujin-shin Nov 5, 2024
acb26eb
v1.2.0 QA 진행 (#82)
eujin-shin Nov 5, 2024
21651a9
feat: revert image limit change
eujin-shin Nov 5, 2024
ed81e42
feat: add exceptions for profile name
eujin-shin Nov 6, 2024
20d158c
feat: adjust mobile styles
eujin-shin Nov 6, 2024
f2b3c61
feat: modify UI
eujin-shin Nov 6, 2024
209c2bf
Merge branch 'master' into release/v1.2.0
eujin-shin Nov 6, 2024
a1ece25
Merge branch 'develop' into release/v1.2.0
eujin-shin Nov 7, 2024
fef9e98
v1.2.1 QA 진행 (#87)
eujin-shin Nov 8, 2024
79bd72a
fix: open new page at tutorial
eujin-shin Nov 10, 2024
3d0e9bc
feat: edit default notices
eujin-shin Nov 10, 2024
dcec46c
feat: edit image upload guide information
eujin-shin Nov 10, 2024
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
5 changes: 3 additions & 2 deletions .github/workflows/cd_workflow_dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Frontend Dev Server CD
on:
push:
branches:
- 'release/**'
- "release/**"

jobs:
build:
Expand All @@ -28,7 +28,8 @@ jobs:
echo "NEXT_PUBLIC_KAKAO_DOMAIN=${{ secrets.NEXT_PUBLIC_KAKAO_DOMAIN }}" >> .env
echo "NEXT_PUBLIC_AUTH_KAKAO_KEY=${{ secrets.NEXT_PUBLIC_AUTH_KAKAO_KEY_DEV }}" >> .env
echo "NEXT_PUBLIC_DOMAIN=${{ secrets.NEXT_PUBLIC_DOMAIN_DEV }}" >> .env

echo "NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID }}" >> .env

- name: 압축
run: zip -r ./frontend_freebe.zip .

Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/cd_workflow_prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Frontend Prod Server CD

on:
push:
branches:
branches:
- master

jobs:
Expand Down Expand Up @@ -30,6 +30,7 @@ jobs:
echo "NEXT_PUBLIC_AUTH_KAKAO_KEY=${{ secrets.NEXT_PUBLIC_AUTH_KAKAO_KEY }}" >> .env
echo "NEXT_PUBLIC_DOMAIN=${{ secrets.NEXT_PUBLIC_DOMAIN }}" >> .env
echo "NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID }}" >> .env
echo "NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID }}" >> .env

- name: 압축
run: zip -r ./frontend_freebe.zip .
Expand Down
2 changes: 1 addition & 1 deletion next.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export default withSentryConfig(withVanillaExtract(nextConfig), {
// For all available options, see:
// https://github.com/getsentry/sentry-webpack-plugin#options

org: "for-u-5h",
org: "freebe",
project: "javascript-nextjs",

// Only print logs for uploading source maps in CI
Expand Down
4 changes: 4 additions & 0 deletions public/icons/loading.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions sentry.client.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import * as Sentry from "@sentry/nextjs";

Sentry.init({
dsn: "https://8aa61c4c6bf4aca3fb8552ed092d88ee@o4508070352257024.ingest.us.sentry.io/4508070354616320",

dsn: "https://92e2c980bb6bf71c3be5e4f0170006ed@o4508237874462720.ingest.us.sentry.io/4508237875773440",
denyUrls: [/https:\/\/www\.freebe\.n-e\.kr/, /http:\/\/43\.200\.240\.195/],
// Add optional integrations for additional features
integrations: [Sentry.replayIntegration()],

Expand Down
2 changes: 1 addition & 1 deletion sentry.edge.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import * as Sentry from "@sentry/nextjs";

Sentry.init({
dsn: "https://8aa61c4c6bf4aca3fb8552ed092d88ee@o4508070352257024.ingest.us.sentry.io/4508070354616320",
dsn: "https://92e2c980bb6bf71c3be5e4f0170006ed@o4508237874462720.ingest.us.sentry.io/4508237875773440",

// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
tracesSampleRate: 1,
Expand Down
4 changes: 2 additions & 2 deletions sentry.server.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
import * as Sentry from "@sentry/nextjs";

Sentry.init({
dsn: "https://8aa61c4c6bf4aca3fb8552ed092d88ee@o4508070352257024.ingest.us.sentry.io/4508070354616320",

dsn: "https://92e2c980bb6bf71c3be5e4f0170006ed@o4508237874462720.ingest.us.sentry.io/4508237875773440",
denyUrls: [/https:\/\/www\.freebe\.n-e\.kr/, /http:\/\/43\.200\.240\.195/],
// Define how likely traces are sampled. Adjust this value in production, or use tracesSampler for greater control.
tracesSampleRate: 1,

Expand Down
17 changes: 16 additions & 1 deletion src/app/(customer)/[profileName]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Metadata } from "next";
import { PageParams } from "route-parameters";
import { Photographer } from "profile-types";
import BackgroundImage from "@/containers/customer/main/background-image";
import { defaultLinks } from "@/constants/photographer/mypage";
import InfoSheet from "@/containers/customer/main/info-sheet";
Expand All @@ -16,12 +17,26 @@ export async function generateMetadata({
};
}

const EXCEPTIONAL_PROFILE_NAMES = [
".env",
"index.php",
"resolve",
"query",
"dns-query",
];

const CustomerMainPage = async ({
params,
}: {
params: Pick<PageParams, "profileName">;
}) => {
const photographerProfile = await getPhotographerProfile(params.profileName);
function isExceptionalName() {
return EXCEPTIONAL_PROFILE_NAMES.includes(params.profileName);
}

const photographerProfile: Photographer = isExceptionalName()
? { linkInfos: [], message: "", profileName: "" }
: await getPhotographerProfile(params.profileName);

return (
<div className={mainStyle}>
Expand Down
9 changes: 9 additions & 0 deletions src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,12 @@ input:-webkit-autofill:active {
width: 8px;
height: 8px;
}

button {
cursor: pointer;
}

button:hover,
button:active {
filter: brightness(0.92);
}
5 changes: 4 additions & 1 deletion src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import "@mantine/notifications/styles.css";
import "./globals.css";
import { ColorSchemeScript, MantineProvider } from "@mantine/core";
import { Notifications } from "@mantine/notifications";
import { GoogleAnalytics } from "@next/third-parties/google";
import { GoogleAnalytics, GoogleTagManager } from "@next/third-parties/google";
import { METADATA } from "@/constants/metadata";

const pretendard = localFont({
Expand Down Expand Up @@ -52,6 +52,9 @@ export default function RootLayout({
className={pretendard.className}
style={{ overflowX: "hidden", overflowY: "hidden" }}
>
<GoogleTagManager
gtmId={process.env.NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID || ""}
/>
<GoogleAnalytics
gaId={process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID || ""}
/>
Expand Down
2 changes: 2 additions & 0 deletions src/app/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
User-agent: *
Disallow: /photographer/, /customer/
16 changes: 16 additions & 0 deletions src/app/sitemap.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->


<url>
<loc>https://www.freebe.co.kr/</loc>
<lastmod>2024-11-05T07:25:39+00:00</lastmod>
</url>


</urlset>
48 changes: 43 additions & 5 deletions src/components/buttons/buttons.css.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { breakpoints } from "@/styles/breakpoints.css";
import sprinkles from "@/styles/sprinkles.css";
import { texts } from "@/styles/text.css";
import { style, styleVariants } from "@vanilla-extract/css";
import { keyframes, style, styleVariants } from "@vanilla-extract/css";

const baseTab = style([
sprinkles({ borderColor: "stroke-grey" }),
Expand Down Expand Up @@ -51,6 +51,19 @@ const baseBottomButton = style([
},
]);

const rotateAnimation = keyframes({
from: {
transform: "rotate(0deg)",
},
to: {
transform: "rotate(360deg)",
},
});

export const loaderStyle = style({
animation: `${rotateAnimation} 2s linear infinite`,
});

const buttonStyles = styleVariants({
kakao: {
display: "flex",
Expand All @@ -68,9 +81,7 @@ const buttonStyles = styleVariants({
fontSize: 17,
fontWeight: 600,
color: "#1a1a1a",
":hover": {
cursor: "pointer",
},
cursor: "pointer",
},
add: [
texts["button-01"],
Expand Down Expand Up @@ -145,6 +156,12 @@ const buttonStyles = styleVariants({
{
border: "none",
cursor: "initial",
":hover": {
filter: "none",
},
":active": {
filter: "none",
},
},
],
primary: [
Expand Down Expand Up @@ -174,10 +191,16 @@ const buttonStyles = styleVariants({
color: "blue",
}),
{
background: "none",
backgroundColor: "transparent",
borderStyle: "solid",
borderRadius: 8,
borderWidth: 1,
":hover": {
backgroundColor: "white",
},
":active": {
backgroundColor: "white",
},
},
],
secondary: [
Expand All @@ -203,6 +226,12 @@ const buttonStyles = styleVariants({
{
border: "none",
cursor: "initial",
":hover": {
filter: "none",
},
":active": {
filter: "none",
},
},
],
linkArea: {
Expand All @@ -220,11 +249,20 @@ export const closeStyles = styleVariants({
zIndex: 3,
display: "flex",
alignItems: "center",
cursor: "pointer",
},
grey: [
sprinkles({
color: "stroke-grey",
}),
{
":hover": {
filter: "brightness(0.7);",
},
":active": {
filter: "brightness(0.7);",
},
},
],
white: [
sprinkles({
Expand Down
41 changes: 33 additions & 8 deletions src/components/buttons/common-buttons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ import {
ButtonHTMLAttributes,
MouseEventHandler,
} from "react";
import Image from "next/image";
import Link from "next/link";
import { LinkType } from "profile-types";
import buttonStyles from "./buttons.css";
import buttonStyles, { loaderStyle } from "./buttons.css";

interface ButtonProps
extends DetailedHTMLProps<
Expand All @@ -20,6 +21,7 @@ interface ButtonOptions {
size: "xs" | "sm" | "md" | "lg";
styleType: "primary" | "secondary" | "line" | "danger";
link?: string;
loading?: boolean;
}

export const CustomButton = ({
Expand All @@ -30,18 +32,29 @@ export const CustomButton = ({
disabled,
children,
link,
loading,
...props
}: ButtonProps & ButtonOptions) => {
return (
<button
type="button"
onClick={onClick}
className={`${disabled ? buttonStyles.disabled : buttonStyles[styleType]} ${buttonStyles[size]}`}
disabled={disabled}
className={`${disabled || loading ? buttonStyles.disabled : buttonStyles[styleType]} ${buttonStyles[size]}`}
disabled={disabled || loading}
{...props}
>
{children}
{title}
{loading ? (
<Image
src="/icons/loading.svg"
width={30}
height={30}
alt="now loading"
className={loaderStyle}
/>
) : (
title
)}
{link && <Link href={link} className={buttonStyles.linkArea} />}
</button>
);
Expand Down Expand Up @@ -125,16 +138,28 @@ export const BottomButton = ({
onClick,
disabled,
type,
loading,
...props
}: ButtonProps) => {
}: ButtonProps & { loading?: boolean }) => {
return (
<button
type={type === "submit" ? "submit" : "button"}
className={`${disabled ? buttonStyles.bottomDisabled : buttonStyles.bottom}`}
onClick={disabled ? () => {} : onClick}
className={`${disabled || loading ? buttonStyles.bottomDisabled : buttonStyles.bottom}`}
onClick={onClick}
disabled={disabled || loading}
{...props}
>
{title}
{loading ? (
<Image
src="/icons/loading.svg"
width={30}
height={30}
alt="now loading"
className={loaderStyle}
/>
) : (
title
)}
</button>
);
};
24 changes: 17 additions & 7 deletions src/components/common/bottom-sheet.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { useState } from "react";
import Image from "next/image";
import { bottomSheetStyles } from "./common.css";

const BottomSheet = ({ children }: { children: React.ReactNode }) => {
Expand All @@ -25,13 +26,22 @@ const BottomSheet = ({ children }: { children: React.ReactNode }) => {
}
}
>
<div
role="presentation"
className={bottomSheetStyles.header}
onTouchEnd={handleSheetControl}
onClick={handleSheetControl}
>
<div className={bottomSheetStyles.handle} />
<div className={bottomSheetStyles.header}>
<button
type="button"
className={bottomSheetStyles.control}
onClick={handleSheetControl}
>
<Image
src="/icons/right.svg"
alt="메뉴"
width={16}
height={16}
className={
isFull ? bottomSheetStyles.closeIcon : bottomSheetStyles.openIcon
}
/>
</button>
</div>
<div className={bottomSheetStyles.body}>{children}</div>
</div>
Expand Down
Loading
Loading