THE CAMP Unofficial Library
๐ ์ก๊ตฐํ๋ จ์๊ฐ ํด๋์ ํ ์ฌ์ฉ์ ํ๊ฐํ๋ฉด์ ์ธํฐ๋ท ํธ์ง ์๋น์ค๋ฅผ ์ค๋จํ์ต๋๋ค. (์ก๊ตฐํ๋ จ์ ๊ณต์ง) ์ฌ๋จ ์ ๋ณ๊ต์ก๋์์๋ ํ๋ จ๋ณ์ ํด๋์ ํ ์ฌ์ฉ์ ํ๊ฐํ๊ณ ์์ผ๋ฏ๋ก, ์์ผ๋ก๋ ๋ ์บ ํ๋ฅผ ํตํด ์์ฑํ ํธ์ง๊ฐ ์ถ๋ ฅ๋ฌผ๋ก ์ ๋ฌ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. (๋ ์บ ํ ๊ณต์ง) ์ด์ ๋ฐ๋ผ the-camp-lib์ ์ ์ง๋ณด์๋ฅผ ์ค๋จํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. (2023๋ 11์ 6์ผ)
โ ๏ธ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ ์บ ํ ์๋น์ค์ ๊ณต์ API ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋๋ค. ๋ฐ๋ผ์ ์๊ณ ์์ด API ์ ๊ณต์ด ์ ์ง๋๊ฑฐ๋, ๋์์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
๐ ์ฌ์ฉ์๋ ๋ ์บ ํ ์๋น์ค์ ์ด์์ ๊ณ ์๋ก ๋ฐฉํดํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์๋ ์๋ฉ๋๋ค. ์๋น์ค์ ๊ณผ๋ํ ํธ๋ํฝ์ ๋ฐ์์ํค๊ฑฐ๋ ๊ฒฐํจ์ ์ ๋ฐํ๋ ๋ฑ ์๋น์ค ์ด์์ ๋ฐฉํดํ๋ ํ์๋ฅผ ํ์ง ์๋๋ก ์ฃผ์ํด์ฃผ์ธ์. ์ฌ์ฉ์๊ฐ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ํ ๊ฒฐ๊ณผ์ ๋ํด ํ๋ก์ ํธ ์ค๋์ ๋ฉ์ธํ ์ด๋๋ ์ด๋ ํ ์ฑ ์๋ ๋ถ๋ดํ์ง ์์ต๋๋ค.
โ๏ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ๋ฌธ์๋ ์ด์๋ก ๋ฑ๋กํด์ฃผ์ธ์.
๋๊ตญ๋ฏผ ๊ตญ๊ตฐ ์ํต ์๋น์ค ๋ ์บ ํ๋ฅผ ์ฌ์ดํธ ์ธ๋ถ์์ ์ด์ฉํ๊ธฐ ์ํด ๋ง๋ ๋น๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. ํ์ฌ ์ธํฐ๋ท ํธ์ง ๋ฐ์ก์ ์ค์ฌ์ผ๋ก ๊ตฌํ๋์ด ์์ต๋๋ค. ๋งค์ฃผ ์์์ผ 0์ API์ ์ ํจ์ฑ์ ์ฒดํฌํฉ๋๋ค. passing
์ํ๊ฐ ์๋๋ผ๋ฉด API๊ฐ ๋์ํ์ง ์๋๋ค๋ ์๋ฏธ์ด๋ ์ฐธ๊ณ ํด์ฃผ์ธ์.
Installation
$ npm install the-camp-lib --save
Usage
const thecamp = require('the-camp-lib');
// or
import * as thecamp from 'the-camp-lib';
async function main() {
const soldier = new thecamp.Soldier(
'๋ฐ๋ซ๋ซ',
'20011129',
'20200829',
'์๋น๊ตฐ์ธ/ํ๋ จ๋ณ',
'์ก๊ตฐ',
'์ก๊ตฐํ๋ จ์(00์ฐ๋)',
thecamp.SoldierRelationship.FRIEND,
);
const client = new thecamp.Client();
await client.login('user@email.com', 'password');
await client.addSoldier(soldier);
const [trainee] = await client.fetchSoldiers(soldier);
const message = new thecamp.Message('Test title', 'Test content', trainee);
await client.sendMessage(soldier, message);
}
Development
์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.
$ git clone https://github.com/ParkSB/the-camp-lib.git
$ cd the-camp-lib
$ npm install
๋ชจ๋ ์ฝ๋๋ src
๋๋ ํ ๋ฆฌ ์๋์ ์์ต๋๋ค. npm test
๋ช
๋ น์ผ๋ก API ์ ํจ์ฑ์ ์ฒดํฌํ๊ณ ์ ๋ ํ
์คํธ๋ฅผ ์คํํ ์ ์์ต๋๋ค. npm run test:unit
๋ช
๋ น๊ณผ npm run test:health-check
๋ช
๋ น์ผ๋ก ์ ๋ ํ
์คํธ์ API ์ฒดํฌ๋ฅผ ๋ฐ๋ก ์คํํ ์๋ ์์ต๋๋ค. ๋ํ test/feature
๋๋ ํ ๋ฆฌ ํ์์ ํ
์คํธํ ์ฝ๋๋ฅผ ์์ฑํ ๋ค ts-node filename.ts
๋ฅผ ์คํํ๋ ๋ฐฉ์์ผ๋ก ์ค์ ๋์์ ํ
์คํธํ ์ ์์ต๋๋ค.
์์์ npm run build
๋ฅผ ์คํํ๋ฉด dist
๋๋ ํ ๋ฆฌ์ ๋น๋๋ ํ์ผ์ด ๋ง๋ค์ด์ง๋๋ค. test
๋๋ ํ ๋ฆฌ ํ์์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค npm init
, npm install ../../ --save
๋ฅผ ์คํํ๋ฉด ํด๋น ๋๋ ํ ๋ฆฌ์ ํจํค์ง๊ฐ ์ค์น๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ก์ปฌ์์ ๋ฐฐํฌ ๋ฒ์ ์ ํ
์คํธํ ์ ์์ต๋๋ค.
Specifications
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ ์บ ํ์ ๊ฐ์ ๋ ๊ณ์ ์ด ํ์ํฉ๋๋ค.
Models
interface Cookie
์ธ์ ์๋ณ์ ์ํ ์ฟ ํค.
iuid: string
class Soldier
๊ตฐ์ธ ์ ๋ณด.
missSoldierClassCdNm: SoldierClassName
- ์ฑ๋ถmissSoldierClassCd: SoldierClass
- ์ฑ๋ถ ์ฝ๋grpCdNm: SoldierGroupName
- ๊ตฐ์ขgrpCd: SoldierGroup
- ๊ตฐ์ข ์ฝ๋name: string
- ์ด๋ฆbirth: string
- ์๋ ์์ผenterDate: string
- ์ ์ด ๋ ์งtrainUnitCd: SoldierUnit
- ์ ์๋ถ๋ ์ฝ๋trainUnitNm: SoldierUnitNm
- ์ ์๋ถ๋missSoldierRelationshipCd: SoldierRelationship
- ๊ด๊ณ ์ฝ๋traineeMgrSeq?: string
- ํ๋ จ๋ณ ์๋ณ ์ฝ๋
Constructor
name: string
- ์ด๋ฆ (e.g.,'๋ฐ๋ซ๋ซ'
)birth: string
- ์๋ ์์ผ (e.g.,'20011129'
)enterDate: string
- ์ ์๋ ์ง (e.g.,'20200829'
)className: SoldierClassName
- ์ฑ๋ถ (e.g.,'์๋น๊ตฐ์ธ/ํ๋ จ๋ณ'
)groupName: SoldierGroupName
- ๊ตฐ์ข (e.g.,'์ก๊ตฐ'
)unitName: SoldierUnitName
- ์ ์๋ถ๋ (e.g.,'28์ฌ๋จ'
,'์ก๊ตฐํ๋ จ์(25์ฐ๋)'
)relationship: SoldierRelationship
- ๊ด๊ณ (e.g.,SoldierRelationship.FRIEND
)
enum SoldierClass
์ฑ๋ถ ์ฝ๋.
'์๋น๊ตฐ์ธ/ํ๋ จ๋ณ' = '0000490001'
'๋ณ์ฌ' = '0000490002'
'์ฅ๊ต' = '0000490003'
'๋ถ์ฌ๊ด' = '0000490004'
'๊ตฐ๋ฌด์' = '0000490005'
์ธํฐ๋ท ํธ์ง๋
์๋น๊ตฐ์ธ/ํ๋ จ๋ณ
์๊ฒ๋ง ๋ฐ์กํ ์ ์์ต๋๋ค.
enum SoldierGroup
๊ตฐ์ข ์ฝ๋.
'์ก๊ตฐ' = '0000010001'
'ํด๊ตฐ' = '0000010002'
'๊ณต๊ตฐ' = '0000010003'
'ํด๋ณ๋' = '0000010004'
์ธํฐ๋ท ํธ์ง๋
์ก๊ตฐ
์๊ฒ๋ง ๋ฐ์กํ ์ ์์ต๋๋ค.
enum SoldierRelationship
๊ด๊ณ ์ฝ๋.
PARENT = '0000420001'
- ๋ถ๋ชจSPOUSE = '0000420003'
- ๋ฐฐ์ฐ์SIBLING = '0000420002'
- ํ์ /์๋งคFRIEND = '0000420006'
- ์น๊ตฌ/์ง์ธLOVER = '0000420005'
- ์ ์ธRELATIVE = '0000420004'
- ์น์ฒFAN = '0000420007'
- ํฌ
class Message
์ธํฐ๋ท ํธ์ง ์ ๋ณด.
sympathyLetterSubject: string
- ํธ์ง ์ ๋ชฉsympathyLetterContent: string
- ํธ์ง ๋ด์ฉ (1500์ ์ดํ)traineeMgrSeq: string
- ํ๋ จ๋ณ ์๋ณ ์ฝ๋
Constructor
sympathyLetterSubject: string
- ํธ์ง ์ ๋ชฉ (e.g.,'Title'
)sympathyLetterContent: string
- ํธ์ง ๋ด์ฉ (e.g.,'Content'
,'<i>Content</i>'
)traineeMgrSeq: string
- ํ๋ จ๋ณ ์๋ณ ์ฝ๋ (e.g.,soldier.getTraineeMgrSeq()!
)
Services
login(id: string, password: string)
๋ ์บ ํ์ ๋ก๊ทธ์ธํด ์ธ์ ์ฟ ํค๋ฅผ ์ป๋๋ค.
- Parameters
id: string
- ๋ ์บ ํ ๊ณ์ ์ด๋ฉ์ผpassword: string
- ๋ ์บ ํ ๊ณ์ ๋น๋ฐ๋ฒํธ
- Return value
Promise<Cookie>
- ์ธ์ ์๋ณ์ ์ํ ์ฟ ํค
addSoldier(cookies: Cookie, soldier: Soldier)
๊ณ์ ์ ๊ตฐ์ธ์ ์ถ๊ฐํ๋ค.
- Parameters
cookies: Cookie
- ์ธ์ ์๋ณ์ ์ํ ์ฟ ํคsoldier: Soldier
- ๊ตฐ์ธ ์ ๋ณด
- Return value
Promise<boolean>
- ์ถ๊ฐ์ ์ฑ๊ณตํ๊ฑฐ๋, ์ด๋ฏธ ํด๋น ๊ตฐ์ธ์ด ์กด์ฌํ๋ฉดtrue
๋ฅผ ๋ฐํํ๋ค.
fetchSoldier(cookies: Cookie, soldier: Soldier)
๊ตฐ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
- Parameters
cookies: Cookie
- ์ธ์ ์๋ณ์ ์ํ ์ฟ ํคsoldier: Soldier
- ๊ตฐ์ธ ์ ๋ณด
- Return value
Promise<Soldier[]>
- ๊ณ์ ์ ์ถ๊ฐํ ๊ตฐ์ธ ๋ชฉ๋ก ์ค ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ๊ตฐ์ธ๊ณผ ์ด๋ฆ, ์์ผ, ์ ์ ๋ ์ง, ์ ์ ๋ถ๋ ์ฝ๋๊ฐ ์ผ์นํ๋Soldier
๋ฆฌ์คํธ๋ฅผ ๋ฐํํ๋ค.
sendMessage(cookies: Cookie, trainee: Soldier, message: Message)
์ธํฐ๋ท ํธ์ง๋ฅผ ์ ์กํ๋ค.
- Parameters
cookies: Cookie
- ์ธ์ ์๋ณ์ ์ํ ์ฟ ํคtrainee: Trainee
- ํ๋ จ๋ณ ์ ๋ณดmessage: Message
- ์ธํฐ๋ท ํธ์ง ์ ๋ณด
- Return value
Promise<boolean>
- ์ ์ก์ ์ฑ๊ณตํ๋ฉดtrue
๋ฅผ ๋ฐํํ๋ค.
Examples
- ์ธํฐ๋ท ํธ์ง ์ ์ก ์์: send-message
- ๋ด์ค ๋ฐ์ก ํ๋ก์ ํธ: daily-news-for-trainee
Other implementations
- Python: lewisleedev/thecampy
License
This project is licensed under the MIT License - see the LICENSE file for details.