Closed eeeesong closed 3 years ago
우선 swift 버전의 DTO는 작성을 해보았어요! (일부 struct는 원랜 DTO 내부 타입이 아닌데, 편의상 우선 붙여 놓은 것입니다)
@Lia316 와 오후에 이야기 나눈대로 전부 옵셔널로 되어있기 때문에 데이터를 받아 온 이후, nil이 아닌 것들을 뽑아 내서 쓰면 되는 형태입니다!
즉, 어떤 데이터가 오든 다 이 DTO의 타입으로 파싱하면 됩니다
struct GameDTO: Decodable {
var teams: Teams?
struct Teams: Decodable {
var home: String
var away: String
}
var inning: Inning?
struct Inning: Decodable {
var counter: Int
var isTop: Bool
}
var score: Score?
struct Score: Decodable {
var home: Int
var away: Int
}
var batter: Player?
var pitcher: Player?
struct Player: Decodable {
var name: String
var info: String
}
var newPitch: Pitch?
struct Pitch: Decodable{
var count: Int
var result: String
var log: String
}
var ballChanged: BallChanged?
struct BallChanged: Decodable { //1 or 0
var strike: Int?
var ball: Int?
var out: Int?
}
var baseChanged: BaseChanged?
struct BaseChanged: Decodable { //1 or 0 or -1
var first: Int?
var second: Int?
var third: Int?
var home: Int?
}
}
json 버전입니다! 회의 때 말씀해주신 형식 반영해서 data/error 씌우기(?) 반영하였고, 코드 아래에 몇가지 포인트들 적어보았습니다.
{
"data": {
"teams" : {
"home": "Marvel",
"away": "Captin"
},
"inning": {
"counter": 2,
"isTop": false
},
"score": {
"home": 5,
"away": 1,
},
"batter": {
"name": "shion",
"info": "백엔드 천재"
},
"pitcher": {
"name": "lia",
"info": "iOS 천재"
},
"new-pitch": {
"count": 5,
"result": "스트라이크",
"log": "2-2"
},
"ball-changed": {
"strike": 1,
"ball": 0,
"out": 0
},
"base-changed": {
"first": -1,
"second": 1,
"third": 0,
"home": 0
}
},
"error": null
}
모든 값은 포함시키셔도 되고, 포함시키지 않으셔도 됩니다. 변경된 사항만 보내주시고 나머지는 null 처리하셔도 됩니다!
inning의 counter -> 2회
이 부분을 뭐라고 불러야할지 몰라서 counter라고 썼는데.. 혹시 마땅한 네이밍을 아시는 분이 계시다면..ㅎㅎㅎ 구글링 해봤는데 잘 모르겠더라고요..
ball-changed
와 base-changed
ball-changed
의 각 값은 추가되기만 하므로, 변화가 없을 시 0 / 있을 시 1을 보내주시면 좋을 것 같습니다.
base-changed
의 값은 감소하기도 하므로, 선수가 이동했을 시 -1, 그대로면 0, 추가된 경우 1을 보내주시면 될 것 같아요!
천천히 보시고 궁금한 점 있으시면 언제든 말 걸어주세요!! 특히나 3번 사항에 대해.. 이렇게 데이터를 전달하도록 구현하는 것에 무리가 있으시다면 꼭 말씀해주세요!
오오 정리 너무 잘 해주셨네요!! 정리해주신대로 데이터 전달할 수 있도록 구현해보겠습니다! ㅎㅎㅎ
질문) new-pitch의 count는 5번째 공을 던졌고, 결과는 스트라이크며, 그에 따라 2-2가 되었다는 뜻일까요?? ㅠ 아니면, 2-2인 상황에서 5번째 공을 던졌다고 생각하면 될까요!? count와 log가 일치하지 않아 헷갈려서 질문 드립니다!
저 생각해보니까 헷갈려서 질문드립니다! base-changed 가 모든 변화를 나타낼 수 있는 타입인지 모르겠습니다. 예를 들어, 1루, 2루, 3루 모두 채워진 상태에서 안타에 성공해서 각각 1루씩 옮기게 되면.. 어떻게 표현할 수 있나요?
@ehdrhelr 아아 카운트랑 로그는 생각을 안하고 그냥 예시를 써버렸습니다.. 혼동을 드려 죄송합니다ㅠㅠ 공 5번 던져서는 2-2가 나올 수 없다는 말씀이신거죠?!
new-pitch의 count는 5번째 공을 던졌고, 결과는 스트라이크며, 그에 따라 2-2가 되었다
가 맞습니다!!
@Lia316 아 그러네요ㅎㅎ -1과 1이 동시에 있으면 표현을 할수가 없군요.. 이 부분이 좀 어렵네요 허허
그러면 각 루의 in / out 을 각자 따져야 할 것 같네요! (점수 득점 없이 out만 되는건 고려 안하기로 한 게 맞죠? 만약 그것까지 고려해야한다면 In / next / out 정도를 다 따져야 할 것 같아서..)
그렇다고 한다면 이런 방식이 괜찮지 않을까 싶습니다!!
"first": {
"in": false,
"out": true
},
"second": {
"in": true,
"out": true
},
"third": {
"in": true,
"out": true
}
그럼 home은 없어도 되겠네요!! 혹시 더 좋은 방법이 떠오르신다면 말해주세요!
오 괜찮은 것 같습니다!
또 다른 의문점이 생기면 그때 다시 생각해보구! 일단은 이렇게 해도 좋을 것 같습니다!
호옥시 게임을 선택하고 제일 처음 보여지는 1이닝은 이 정보만 드려도 될까요?? (1이닝에서 pitch가 진행됨에 따라 new-pitch, ball-changed, base-changed가 추가된 json 데이터 전달드릴 예정) 더 필요한 부분이 있다면 추가하겠습니다..!!
{
"data": {
"teams": {
"away": "Marvel",
"home": "Captain"
},
"inning": {
"counter": 0,
"top": false
},
"score": {
"away": 0,
"home": 0
},
"batter": {
"name": "시온",
"info": "백엔드 천재"
},
"pitcher": {
"name": "리아",
"info": "iOS 천재"
}
},
"error": null
}
@ehdrhelr 넵넵!! 너무 괜찮습니다 :) 근데 혹시 inning counter는 0 == 1회가 맞나요??
리아가 말씀해주신 부분 반영한 (일단최종) JSON 입니다!!
@ehdrhelr 바뀐 부분은 base-changed 부분 하나예요!
{
"data": {
"teams" : {
"home": "Marvel",
"away": "Captin"
},
"inning": {
"counter": 2,
"isTop": false
},
"score": {
"home": 5,
"away": 1,
},
"batter": {
"name": "shion",
"info": "백엔드 천재"
},
"pitcher": {
"name": "lia",
"info": "iOS 천재"
},
"new-pitch": {
"count": 5,
"result": "스트라이크",
"log": "2-2"
},
"ball-changed": {
"strike": 1,
"ball": 0,
"out": 0
},
"base-changed": {
"first": {
"in": false,
"out": true
},
"second": {
"in": true,
"out": true
},
"third": {
"in": true,
"out": true
}
}
},
"error": null
}
@eeeesong 감사합니다!! inning counter는 실수입니다 ㅠㅡㅠ ,, 1 == 1회로 바꿀게요!!
아직 네트워크 받아온 뒤 GameDTO 형식을 프론트 내부 타입에 적용하는 부분을 구현하지 못해서 이 이슈는 조금 더 열어놓겠습니다!
이슈를 파서 논의하면 더 수월할 것 같아서 하나 생성해보았습니다 :)