Post System - kookmin-sw/capstone-2025-44 GitHub Wiki

๐Ÿ“ฎ ๊ฒŒ์‹œ๊ธ€ ์‹œ์Šคํ…œ (Post System)

ํƒ€์ž„ํŽ˜์ด์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์œผ๋กœ, ํ™œ๋™ ๊ฒŒ์‹œ๊ธ€์„ ์ƒ์„ฑ, ์กฐํšŒ, ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.


Relevant Source Files


1. ์‹œ์Šคํ…œ ๊ฐœ์š”

Post ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • Post Listing
  • Post Details
  • Post Creation Flow
  • Applicant Management

2. Post ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

Post์˜ ์ฃผ์š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


3. Post ๋ชฉ๋ก (Post Listing)

์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํ•„ํ„ฐ๋งํ•˜๋ฉฐ, ๋ฌดํ•œ ์Šคํฌ๋กค๋กœ ๋” ๋งŽ์€ ๊ฒŒ์‹œ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ฒ€์ƒ‰
  • ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ
  • ๋ฌดํ•œ ์Šคํฌ๋กค
  • FCM ํ‘ธ์‹œ ์•Œ๋ฆผ ์—ฐ๋™
  • ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ ๋ฒ„ํŠผ ๊ณ ์ •

Sources:


4. ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ (Post Detail)

ํŠน์ • ๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•œ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ์‚ฌ์šฉ์ž ์—ญํ• (์ž‘์„ฑ์ž/์ง€์›์ž)์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • Post ์ •๋ณด ํ‘œ์‹œ(ActivityBox)
  • ์ฐธ์—ฌ ์‹ ์ฒญ/์ทจ์†Œ
  • ์ž‘์„ฑ์ž์šฉ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ (์ˆ˜์ •, ์‚ญ์ œ, ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ, ์‹ ์ฒญ์ž ๊ด€๋ฆฌ)
  • ์‹ ๊ณ 

Sources:


5. Post API ์—ฐ๋™

Post ๊ด€๋ จ ๋ฐฑ์—”๋“œ API์™€ ํ†ต์‹ ํ•˜์—ฌ ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ, ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ณต ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ๋ช… ์„ค๋ช…
getPostList ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก ์กฐํšŒ
getPostDetail ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ ์กฐํšŒ
postPosting ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ฑ
editPost ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •
deletePost ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ
reportPosting ๊ฒŒ์‹œ๊ธ€ ์‹ ๊ณ 
pullUp ๊ฒŒ์‹œ๊ธ€ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ
getUserActivity ์‚ฌ์šฉ์ž์˜ ํ™œ๋™ ๋‚ด์—ญ ์กฐํšŒ

Sources:


6. ๊ฒŒ์‹œ๊ธ€ ํ‘œ์‹œ ์ปดํฌ๋„ŒํŠธ

ActivityBox

  • ์ƒํƒœ, ์ธ์› ์ˆ˜, ๊ธ‰์—ฌ, ์ œ๋ชฉ, ๋‚ด์šฉ, ์‹œ๊ฐ„, ์œ„์น˜, ์˜ˆ์ƒ ์†Œ์š” ์‹œ๊ฐ„, ์กฐํšŒ์ˆ˜ ๋“ฑ ํ‘œ์‹œ
export const ActivityBox = ({ data, editMode = false }: ActivityBoxType) => {
  // Component code
  return (
    <>
      <Progress>
        <Status $status={data.status}>
          {data.status === "RECRUITING" ? "๋ชจ์ง‘์ค‘" : "๋ชจ์ง‘์™„๋ฃŒ"}
        </Status>
        <HeadCount>
          {data.currentApplicant}/{data.maxNumOfPeople}๋ช…
        </HeadCount>
        <KnotPay>{data.pay} ํƒ€์ž„</KnotPay>
      </Progress>

      <PostInfo>
        {!editMode ? (
          <>
            <Title>{data.title}</Title>
            <Content>{data.content}</Content>
          </>
        ) : (
          // Edit mode UI
        )}
      </PostInfo>

      <MoreInfoContainer>
        <PromiseInfoList>
          <PromiseInfoItem $icon={DateSVG}>
            <span>{BackdateToItemtype(data.startDate)}</span>
          </PromiseInfoItem>
          <PromiseInfoItem $icon={LocationSVG}>
            <span>{data.location}</span>
          </PromiseInfoItem>
          <PromiseInfoItem $icon={TimeSVG}>
            <span>์˜ˆ์ƒ ์†Œ์š” ์‹œ๊ฐ„ {data.volunteerTime}๋ถ„</span>
          </PromiseInfoItem>
        </PromiseInfoList>

        <span>์กฐํšŒ์ˆ˜ {data.viewsCount}ํšŒ</span>
      </MoreInfoContainer>
    </>
  );
};

Sources:


7. ์š”์•ฝ

๊ฒŒ์‹œ๊ธ€ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ๊ธฐ๋Šฅ๋“ค์„ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • ๐Ÿ“‹ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก: ๊ฒ€์ƒ‰, ํ•„ํ„ฐ๋ง, ๋ฌดํ•œ ์Šคํฌ๋กค
  • ๐Ÿ“ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ: ์—ญํ•  ๊ธฐ๋ฐ˜ ์•ก์…˜
  • ๐Ÿ”Œ Post API ์—ฐ๋™
  • ๐Ÿ”” FCM ์•Œ๋ฆผ ๊ธฐ๋Šฅ
  • ๐Ÿ’ก ๊ณตํ†ต UI ์ปดํฌ๋„ŒํŠธ: ActivityBox, BottomFixed ๋“ฑ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ