movieInfo.go 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package model
  2. import (
  3. "crawler/config"
  4. "crawler/service"
  5. "database/sql"
  6. "encoding/json"
  7. "fmt"
  8. "strconv"
  9. )
  10. type MovieInfoModel struct {
  11. SearchMovieInfoParams
  12. SearchMovieInfo
  13. MovieInfo
  14. Nations
  15. Genres
  16. Directors
  17. Actors
  18. ShowTypes
  19. Companys
  20. Audits
  21. Staffs
  22. }
  23. // 일별 박스오피스 검색 변수
  24. type SearchMovieInfoParams struct {
  25. Key string `form:"key" url:"key" binding:"required"`
  26. MovieCd string `form:"movieCd" url:"movieCd" binding:"required"`
  27. }
  28. type SearchMovieInfo struct {
  29. MovieInfoResult struct {
  30. Source string `json:"source"`
  31. MovieInfo MovieInfo `json:"movieInfo"`
  32. } `json:"movieInfoResult"`
  33. }
  34. type MovieInfo struct {
  35. MovieCd string `json:"movieCd"`
  36. MovieNm string `json:"movieNm"`
  37. MovieNmEn string `json:"movieNmEn"`
  38. MovieNmOg string `json:"movieNmOg"`
  39. ShowTm string `json:"showTm"`
  40. PrdtYear string `json:"prdtYear"`
  41. OpenDt string `json:"openDt"`
  42. PrdtStatNm string `json:"prdtStatNm"`
  43. TypeNm string `json:"typeNm"`
  44. Nations []Nations `json:"nations"`
  45. Genres []Genres `json:"genres"`
  46. Directors []Directors `json:"directors"`
  47. Actors []Actors `json:"actors"`
  48. ShowTypes []ShowTypes `json:"showTypes"`
  49. Companys []Companys `json:"companys"`
  50. Audits []Audits `json:"audits"`
  51. Staffs []Staffs `json:"staffs"`
  52. }
  53. type Nations struct {
  54. NationNm string `json:"nationNm"`
  55. }
  56. type Genres struct {
  57. GenreNm string `json:"genreNm"`
  58. }
  59. type Directors struct {
  60. PeopleNm string `json:"peopleNm"`
  61. PeopleNmEn string `json:"peopleNmEn"`
  62. }
  63. type Actors struct {
  64. PeopleNm string `json:"peopleNm"`
  65. PeopleNmEn string `json:"peopleNmEn"`
  66. Cast string `json:"cast"`
  67. CastEn string `json:"castEn"`
  68. }
  69. type ShowTypes struct {
  70. ShowTypeGroupNm string `json:"showTypeGroupNm"`
  71. ShowTypeNm string `json:"showTypeNm"`
  72. }
  73. type Companys struct {
  74. CompanyCd string `json:"companyCd"`
  75. CompanyNm string `json:"companyNm"`
  76. CompanyNmEn string `json:"companyNmEn"`
  77. CompanyPartNm string `json:"companyPartNm"`
  78. }
  79. type Audits struct {
  80. AuditNo string `json:"auditNo"`
  81. WatchGradeNm string `json:"watchGradeNm"`
  82. }
  83. type Staffs struct {
  84. PeopleNm string `json:"peopleNm"`
  85. PeopleNmEn string `json:"peopleNmEn"`
  86. StaffRoleNm string `json:"staffRoleNm"`
  87. }
  88. type MovieInfoTable struct {
  89. InfoID int
  90. MovieCd string
  91. MovieNm *string
  92. MovieNmEn *string
  93. MovieNmOg *string
  94. PrdtYear *int
  95. ShowTm *int
  96. OpenDt *int
  97. PrdtStatNm *string
  98. TypeNm *string
  99. Nations *string
  100. Genres *string
  101. Directors *string
  102. Actors *string
  103. ShowTypes *string
  104. Companys *string
  105. Audits *string
  106. Staffs *string
  107. UpdatedAt *string
  108. CreatedAt string
  109. }
  110. func (this *MovieInfoModel) Insert(row MovieInfo) error {
  111. var (
  112. db = service.DB_MOVIEW
  113. conn = db.SQLDB
  114. query = `
  115. INSERT INTO tb_movie_info (
  116. movie_cd, movie_nm, movie_nm_en, movie_nm_og, prdt_year,
  117. show_tm, open_dt, prdt_stat_nm, type_nm, nations,
  118. genres, directors, actors, show_types, companys,
  119. audits, staffs, updated_at, created_at
  120. )
  121. VALUES
  122. (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NULL, NOW())
  123. ON DUPLICATE KEY UPDATE
  124. movie_nm = VALUES(movie_nm), movie_nm_en = VALUES(movie_nm_en), movie_nm_og = VALUES(movie_nm_og),
  125. prdt_year = VALUES(prdt_year), show_tm = VALUES(show_tm), open_dt = VALUES(open_dt),
  126. prdt_stat_nm = VALUES(prdt_stat_nm), type_nm = VALUES(type_nm), nations = VALUES(nations),
  127. genres = VALUES(genres), directors = VALUES(directors), actors = VALUES(actors),
  128. show_types = VALUES(show_types), companys = VALUES(companys), audits = VALUES(audits),
  129. staffs = VALUES(staffs), updated_at = NOW();
  130. `
  131. data = this.DataFilter(row)
  132. )
  133. _, err := conn.Exec(query,
  134. data.MovieCd, data.MovieNm, data.MovieNmEn, data.MovieNmOg,
  135. data.PrdtYear, data.ShowTm, data.OpenDt, data.PrdtStatNm, data.TypeNm,
  136. data.Nations, data.Genres, data.Directors, data.Actors, data.ShowTypes, data.Companys,
  137. data.Audits, data.Staffs)
  138. if err != nil {
  139. db.SetErrorLog(err, query)
  140. fmt.Println(err)
  141. return err
  142. }
  143. db.SetGeneralLog(config.GL_ACTION_WRITE, query, "insert movie info")
  144. return nil
  145. }
  146. func (this *MovieInfoModel) IsExists(movieCd string) bool {
  147. var (
  148. db = service.DB_MOVIEW
  149. conn = db.SQLDB
  150. query = "SELECT IF(COUNT(*) <= 0, 0, 1) AS `exists` FROM tb_movie_info WHERE movie_cd = ?;"
  151. exists = false
  152. )
  153. err := conn.QueryRow(query, movieCd).Scan(&exists)
  154. if err != nil {
  155. db.SetErrorLog(err, query)
  156. return exists
  157. }
  158. db.SetGeneralLog(config.GL_ACTION_SELECT, query, "select exists movie info")
  159. return exists
  160. }
  161. func (this *MovieInfoModel) Update(row MovieInfo) error {
  162. var (
  163. db = service.DB_MOVIEW
  164. conn = db.SQLDB
  165. query = `
  166. UPDATE tb_movie_info SET
  167. movie_nm = ?, movie_nm_en = ?, movie_nm_og = ?, prdt_year = ?,
  168. show_tm = ?, open_dt = ?, prdt_stat_nm = ?, type_nm = ?, nations = ?,
  169. genres = ?, directors = ?, actors = ?, show_types = ?, companys = ?,
  170. audits = ?, staffs = ?, updated_at = NOW()
  171. WHERE movie_cd = ?;
  172. `
  173. data = this.DataFilter(row)
  174. )
  175. _, err := conn.Exec(query,
  176. data.MovieNm, data.MovieNmEn, data.MovieNmOg,
  177. data.PrdtYear, data.ShowTm, data.OpenDt, data.PrdtStatNm, data.TypeNm,
  178. data.Nations, data.Genres, data.Directors, data.Actors, data.ShowTypes, data.Companys,
  179. data.Audits, data.Staffs, data.MovieCd)
  180. if err != nil {
  181. db.SetErrorLog(err, query)
  182. return err
  183. }
  184. db.SetGeneralLog(config.GL_ACTION_MODIFY, query, "update movie info")
  185. return nil
  186. }
  187. func (this *MovieInfoModel) DataFilter(row MovieInfo) MovieInfoTable {
  188. var result MovieInfoTable
  189. result.MovieCd = row.MovieCd
  190. if row.MovieNm != "" {
  191. result.MovieNm = &row.MovieNm
  192. } else {
  193. result.MovieNm = nil
  194. }
  195. if row.MovieNmEn != "" {
  196. result.MovieNmEn = &row.MovieNmEn
  197. } else {
  198. result.MovieNmEn = nil
  199. }
  200. if row.MovieNmOg != "" {
  201. result.MovieNmOg = &row.MovieNmOg
  202. } else {
  203. result.MovieNmOg = nil
  204. }
  205. if row.PrdtYear != "" {
  206. prdtYear, _ := strconv.Atoi(row.PrdtYear)
  207. result.PrdtYear = &prdtYear
  208. } else {
  209. result.PrdtYear = nil
  210. }
  211. if row.ShowTm != "" {
  212. showTm, _ := strconv.Atoi(row.ShowTm)
  213. result.ShowTm = &showTm
  214. } else {
  215. result.ShowTm = nil
  216. }
  217. if row.OpenDt != "" {
  218. openDt, _ := strconv.Atoi(row.OpenDt)
  219. result.OpenDt = &openDt
  220. } else {
  221. result.OpenDt = nil
  222. }
  223. if row.PrdtStatNm != "" {
  224. result.PrdtStatNm = &row.PrdtStatNm
  225. } else {
  226. result.PrdtStatNm = nil
  227. }
  228. if row.TypeNm != "" {
  229. result.TypeNm = &row.TypeNm
  230. } else {
  231. result.TypeNm = nil
  232. }
  233. if len(row.Nations) > 0 {
  234. nations, _ := json.Marshal(row.Nations)
  235. s := string(nations)
  236. result.Nations = &s
  237. } else {
  238. result.Nations = nil
  239. }
  240. if len(row.Genres) > 0 {
  241. genres, _ := json.Marshal(row.Genres)
  242. s := string(genres)
  243. result.Genres = &s
  244. } else {
  245. result.Genres = nil
  246. }
  247. if len(row.Directors) > 0 {
  248. directors, _ := json.Marshal(row.Directors)
  249. s := string(directors)
  250. result.Directors = &s
  251. } else {
  252. result.Directors = nil
  253. }
  254. if len(row.Actors) > 0 {
  255. actors, _ := json.Marshal(row.Actors)
  256. s := string(actors)
  257. result.Actors = &s
  258. } else {
  259. result.Actors = nil
  260. }
  261. if len(row.ShowTypes) > 0 {
  262. showtypes, _ := json.Marshal(row.ShowTypes)
  263. s := string(showtypes)
  264. result.ShowTypes = &s
  265. } else {
  266. result.ShowTypes = nil
  267. }
  268. if len(row.Companys) > 0 {
  269. companys, _ := json.Marshal(row.Companys)
  270. s := string(companys)
  271. result.Companys = &s
  272. } else {
  273. result.Companys = nil
  274. }
  275. if len(row.Audits) > 0 {
  276. audits, _ := json.Marshal(row.Audits)
  277. s := string(audits)
  278. result.Audits = &s
  279. } else {
  280. result.Audits = nil
  281. }
  282. if len(row.Staffs) > 0 {
  283. staffs, _ := json.Marshal(row.Staffs)
  284. s := string(staffs)
  285. result.Staffs = &s
  286. } else {
  287. result.Staffs = nil
  288. }
  289. return result
  290. }
  291. func (this *MovieInfoModel) Info(movieCd string) (MovieInfoTable, error) {
  292. var (
  293. db = service.DB_MOVIEW
  294. conn = db.SQLDB
  295. query = "SELECT * FROM tb_movie_info WHERE movie_cd = ? LIMIT 1;"
  296. info MovieInfoTable
  297. )
  298. err := conn.QueryRow(query, movieCd).Scan(
  299. &info.InfoID, &info.MovieCd, &info.MovieNm,
  300. &info.MovieNmEn, &info.MovieNmOg, &info.PrdtYear,
  301. &info.ShowTm, &info.OpenDt, &info.PrdtStatNm,
  302. &info.TypeNm, &info.Nations, &info.Genres,
  303. &info.Directors, &info.Actors, &info.ShowTypes,
  304. &info.Companys, &info.Audits, &info.Staffs,
  305. &info.UpdatedAt, &info.CreatedAt,
  306. )
  307. if err != nil && err != sql.ErrNoRows {
  308. db.SetErrorLog(err, query)
  309. return info, err
  310. }
  311. db.SetGeneralLog(config.GL_ACTION_SELECT, query, "select movie info")
  312. return info, nil
  313. }