Team

팀 API

전체 팀매칭 목록과 각 팀의 상세 정보를 조회합니다. 응답에는 자신이 속한 팀과 다른 팀들이 모두 포함되며, 각 팀에 대한 참여 상태가 함께 제공됩니다.

List

const team = await client.team.list()

특정 키워드로 팀을 검색하려면 search 옵션을 전달합니다. 검색은 SWMaestro 서버에서 수행되며, 다음 5개의 필드 중 하나를 선택할 수 있습니다.

  • all (기본값) — 모든 필드
  • team — 팀명
  • member — 연수생명
  • mentor — 멘토명
  • project — 프로젝트명

CLI에서는 mentoring list와 동일한 prefix 문법을 사용합니다.

opensoma team list --search "오픈소마"          # 전체 필드 검색
opensoma team list --search "team:오픈소마"     # 팀명만 검색
opensoma team list --search "mentor:전수열"     # 멘토명 검색
opensoma team list --search "mentor:@me"        # 내가 멘토로 속한 팀만
opensoma team list --search "member:@me"        # 내가 연수생으로 속한 팀만
opensoma team list --search "project:Previzion" # 프로젝트명 검색

SDK에서는 parseTeamSearchQuery 헬퍼로 쿼리 문자열을 파싱하거나 TeamSearchQuery 객체를 직접 만들 수 있습니다.

import { parseTeamSearchQuery } from 'opensoma/shared/utils/team-params'

const team = await client.team.list({
  search: parseTeamSearchQuery('mentor:@me'),
})

@me를 사용하면 현재 로그인한 사용자의 이름이 자동으로 검색어로 치환됩니다.

Response

currentTeams는 현재 참여 중인 팀 수, maxTeams는 최대 참여 가능 팀 수입니다. 각 팀의 joinStatus는 다음 중 하나입니다.

  • 참여 — 참여 가능한 팀
  • 완료 — 팀 구성이 완료되어 더 이상 참여할 수 없는 팀
  • 탈퇴 — 현재 사용자가 속한 팀 (탈퇴 가능)
interface TeamMember {
  name: string
  userId: string
}

interface TeamInfo {
  teams: Array<{
    name: string
    projectName: string
    ownerId: string
    teamId: string
    leader: string
    members: TeamMember[]
    mentors: TeamMember[]
    ictCategoryMajor: string
    ictCategoryMinor: string
    teamCompleted: boolean
    mentorCompleted: boolean
    joinStatus: string
  }>
  currentTeams: number
  maxTeams: number
}

Example

const team = await client.team.list()

const myTeams = team.teams.filter((t) => t.joinStatus === '탈퇴')
console.log(`참여 중인 팀: ${myTeams.map((t) => t.name).join(', ')}`)

for (const t of team.teams) {
  const members = t.members.map((m) => m.name).join(', ')
  console.log(`${t.name} (팀장 ${t.leader}, 팀원 ${members}) - ${t.joinStatus}`)
}