@@ -12,6 +12,8 @@ import { useRouter, useSearchParams } from "next/navigation";
12
12
import Header from "@/components/common/Header/Header" ;
13
13
import { WithMapIcon } from "@/components/common/Header/Header.stories" ;
14
14
import { cards } from "@/data/cardsData" ;
15
+ import axios from "axios" ;
16
+ import useReviewStore from "@/stores/reviewStore" ;
15
17
16
18
const PlaceDetailPage = ( ) => {
17
19
return (
@@ -33,9 +35,9 @@ const ActualPlaceDetailPage = () => {
33
35
const [ isLiked , setIsLiked ] = useState ( false ) ;
34
36
const [ isUploadAction , setIsUploadAction ] = useState ( false ) ;
35
37
const fileInputRef = useRef ( null ) ;
36
-
38
+ const { setPlaceName , setVisitDate , setCategory } = useReviewStore ( ) ;
37
39
const selectedCard = cards . find ( ( card ) => card . id === id ) ;
38
-
40
+
39
41
const { isLoaded } = useJsApiLoader ( {
40
42
googleMapsApiKey : process . env . NEXT_PUBLIC_GOOGLE_MAPS_API_KEY ,
41
43
} ) ;
@@ -62,6 +64,8 @@ const ActualPlaceDetailPage = () => {
62
64
63
65
useEffect ( ( ) => {
64
66
if ( selectedCard ) {
67
+ setPlaceName ( selectedCard . title ) ;
68
+ setCategory ( selectedCard . category ) ;
65
69
setIsClient ( true ) ;
66
70
setAddress ( selectedCard . address ) ;
67
71
fetchCoordinates ( selectedCard . address ) ;
@@ -91,12 +95,62 @@ const ActualPlaceDetailPage = () => {
91
95
fileInputRef . current . click ( ) ;
92
96
} ;
93
97
94
- const handleFileChange = ( event ) => {
98
+ const handleFileChange = async ( event ) => {
95
99
const files = event . target . files ;
96
100
if ( files && files . length > 0 ) {
97
101
const selectedFile = files [ 0 ] ;
98
- setIsReviewBottomSheetOpen ( false ) ;
99
- router . push ( "/reviews/reviewScan" ) ;
102
+
103
+ try {
104
+ const formData = new FormData ( ) ;
105
+ formData . append ( "file" , selectedFile , selectedFile . name ) ;
106
+
107
+ const uploadResponse = await axios . post (
108
+ "https://api.daengplace.com/ocr/upload" ,
109
+ formData ,
110
+ {
111
+ headers : {
112
+ "Content-Type" : "multipart/form-data" ,
113
+ } ,
114
+ }
115
+ ) ;
116
+
117
+ if ( uploadResponse . status === 200 ) {
118
+ const filePath = uploadResponse . data ;
119
+ console . log ( "File uploaded successfully. Path:" , filePath ) ;
120
+
121
+ const analyzeResponse = await axios . post (
122
+ "https://api.daengplace.com/ocr/analyze" ,
123
+ null ,
124
+ {
125
+ params : { filePath : filePath } ,
126
+ }
127
+ ) ;
128
+
129
+ if ( analyzeResponse . status === 200 ) {
130
+ const extractedTexts = analyzeResponse . data ;
131
+ console . log ( extractedTexts ) ;
132
+ const combinedText = extractedTexts . join ( "" ) ;
133
+ const placeName = useReviewStore . getState ( ) . placeName ;
134
+ console . log ( "Extracted texts:" , combinedText ) ;
135
+
136
+ if ( combinedText . includes ( placeName ) ) {
137
+ const visitDateMatch = combinedText . match ( / \d { 4 } [ . / - ] \d { 2 } [ . / - ] \d { 2 } / ) ;
138
+ const visitDate = visitDateMatch ? visitDateMatch [ 0 ] . replace ( / [ \/ - ] / g, "." ) : "날짜 없음" ;
139
+ console . log ( "Extracted visit date:" , visitDate ) ;
140
+ setVisitDate ( visitDate ) ;
141
+ router . push ( "/reviews/reviewScan" ) ;
142
+ } else {
143
+ alert ( "해당 장소 방문 기록이 확인되지 않았습니다." ) ;
144
+ }
145
+ } else {
146
+ console . error ( "Failed to analyze text:" , analyzeResponse . statusText ) ;
147
+ }
148
+ } else {
149
+ console . error ( "Failed to upload image:" , uploadResponse . statusText ) ;
150
+ }
151
+ } catch ( error ) {
152
+ console . error ( "Error during OCR process:" , error ) ;
153
+ }
100
154
}
101
155
} ;
102
156
0 commit comments