Skip to content

[Phase 1] feat(property): 지도 범위 내 매물 조회 API 구현 - #10

Merged
HOKAGO-MEMORIES merged 3 commits into
developfrom
phase/1-property-api-be
Jun 18, 2026
Merged

[Phase 1] feat(property): 지도 범위 내 매물 조회 API 구현#10
HOKAGO-MEMORIES merged 3 commits into
developfrom
phase/1-property-api-be

Conversation

@HOKAGO-MEMORIES

@HOKAGO-MEMORIES HOKAGO-MEMORIES commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

변경 내용

  • F-1 공개 매물 조회 API를 추가했습니다.
  • GET /api/v1/properties에서 지도 bounds와 기본 필터를 처리합니다.
  • GET /api/v1/properties/{propertyId} 상세 조회를 추가했습니다.
  • 공통 성공 응답 { data, message }와 PROPERTY_NOT_FOUND, INVALID_BOUNDS, INVALID_REQUEST 에러 응답을 추가했습니다.
  • H2 기반 테스트 fixture와 MockMvc/HTTP 통합 테스트를 추가했습니다.

연결 이슈

closes #9

테스트

  • cd backend && .\mvnw.cmd test
  • MockMvc API 응답 검증
  • 랜덤 포트 HTTP 통합 테스트 검증

비고

  • F-4 범위인 매물 주변 실거래가, 지도 평균 레이어, 안전 요약 API는 이번 Phase에서 제외했습니다.
  • Frontend는 다음 Phase에서 이 API를 호출해 네이버 지도 마커와 기본 필터를 연동하면 됩니다.

Summary by CodeRabbit

Release Notes

  • New Features

    • Added property REST endpoints to search listings by geographic bounds and fetch property details by ID.
    • Added support for transaction/property type filters plus deposit/price range filtering.
    • Introduced standardized API response envelopes and centralized error responses with consistent error codes/messages.
  • Tests

    • Added controller and HTTP integration coverage for success cases, filtering, invalid bounds, negative filters, and missing/inactive properties.
    • Added test database setup (H2), schema, and seed data.
  • Documentation

    • Added a Phase 1 Property API backend guide.

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Implements the complete F-1 property lookup REST API in Spring Boot. Adds domain enums and DTO records, a centralized error/response infrastructure, a JDBC DAO with dynamic SQL predicate building against a properties table, a service layer with bounds validation, two REST endpoints, PostgreSQL/H2 configuration, and MockMvc plus HTTP integration tests.

Changes

Property API Backend

Layer / File(s) Summary
Domain enums and DTO shapes
backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyType.java, backend/src/main/java/com/ssafy/salmanhae/model/dto/property/TransactionType.java, backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyRow.java, backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertySearchCriteria.java, backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertySummaryResponse.java, backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyDetailResponse.java
PropertyType (5 constants) and TransactionType (3 constants) enums are introduced. PropertyRow is the internal DAO-layer record. PropertySearchCriteria holds bounding-box coordinates and optional filters and exposes validateBounds() that throws ApiException on invalid or inconsistent inputs. PropertySummaryResponse and PropertyDetailResponse are immutable records with from(PropertyRow) factory methods.
Common error and response infrastructure
backend/src/main/java/com/ssafy/salmanhae/common/exception/ErrorCode.java, backend/src/main/java/com/ssafy/salmanhae/common/exception/ApiException.java, backend/src/main/java/com/ssafy/salmanhae/common/exception/ErrorResponse.java, backend/src/main/java/com/ssafy/salmanhae/common/exception/GlobalExceptionHandler.java, backend/src/main/java/com/ssafy/salmanhae/common/response/ApiResponse.java, backend/src/main/java/com/ssafy/salmanhae/common/response/ListResponse.java
ErrorCode enum carries HttpStatus and a message for four error cases. ApiException wraps an ErrorCode and propagates its message. ErrorResponse is a record with a from(ErrorCode) factory. GlobalExceptionHandler maps ApiException to its HTTP status and maps common request exceptions to 400 INVALID_REQUEST. ApiResponse<T> and ListResponse<T> wrap success responses.
DAO contract and JDBC implementation
backend/src/main/java/com/ssafy/salmanhae/model/dao/property/PropertyDao.java, backend/src/main/java/com/ssafy/salmanhae/model/dao/property/JdbcPropertyDao.java
PropertyDao declares findInBounds(PropertySearchCriteria) and findActiveById(Long). JdbcPropertyDao implements both using NamedParameterJdbcTemplate with dynamic SQL predicate assembly, bounding-box and optional filter conditions, a shared RowMapper, and null-safe nullableLong/nullableInteger column helpers.
Service layer
backend/src/main/java/com/ssafy/salmanhae/service/property/PropertyService.java, backend/src/main/java/com/ssafy/salmanhae/service/property/PropertyServiceImpl.java
PropertyService interface declares searchProperties and getProperty. PropertyServiceImpl calls validateBounds() before delegating to the DAO, maps results to response DTOs, and throws ApiException(PROPERTY_NOT_FOUND) for absent properties.
REST controller and configuration
backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java, backend/pom.xml, backend/src/main/resources/application.properties
PropertyController exposes GET /api/v1/properties (bounding-box + optional filters) and GET /api/v1/properties/{propertyId}, wrapping results in ApiResponse/ListResponse. pom.xml adds JDBC, web, validation, PostgreSQL runtime, and H2 test dependencies. application.properties adds environment-variable datasource placeholders.
Test setup and tests
backend/src/test/resources/application-test.properties, backend/src/test/resources/schema.sql, backend/src/test/resources/data.sql, backend/src/test/java/com/ssafy/salmanhae/SalmanhaeApplicationTests.java, backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyControllerTest.java, backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyHttpIntegrationTest.java, phases/property-api-be/*
H2 test profile uses schema.sql (creates properties table) and data.sql (3 active + 1 inactive rows). PropertyControllerTest uses MockMvc to assert search filters, invalid-bounds 400, detail 200, and not-found 404. PropertyHttpIntegrationTest runs on a random port with TestRestTemplate. Phase specification and status documents are added.

Sequence Diagram(s)

sequenceDiagram
  participant Client
  participant PropertyController
  participant PropertyServiceImpl
  participant JdbcPropertyDao
  participant DB as properties table

  rect rgba(100, 149, 237, 0.5)
    Note over Client,DB: Bounds search
    Client->>PropertyController: GET /api/v1/properties?west=..&east=..&south=..&north=..
    PropertyController->>PropertyServiceImpl: searchProperties(PropertySearchCriteria)
    PropertyServiceImpl->>PropertyServiceImpl: criteria.validateBounds()
    PropertyServiceImpl->>JdbcPropertyDao: findInBounds(criteria)
    JdbcPropertyDao->>DB: SELECT ... WHERE is_active=true AND longitude/latitude in bounds [+ optional filters]
    DB-->>JdbcPropertyDao: List of rows
    JdbcPropertyDao-->>PropertyServiceImpl: List<PropertyRow>
    PropertyServiceImpl-->>PropertyController: List<PropertySummaryResponse>
    PropertyController-->>Client: ApiResponse{ data: ListResponse{items, totalCount}, message: "OK" }
  end

  rect rgba(144, 238, 144, 0.5)
    Note over Client,DB: Property detail
    Client->>PropertyController: GET /api/v1/properties/{propertyId}
    PropertyController->>PropertyServiceImpl: getProperty(propertyId)
    PropertyServiceImpl->>JdbcPropertyDao: findActiveById(propertyId)
    JdbcPropertyDao->>DB: SELECT ... WHERE id=? AND is_active=true
    alt found
      DB-->>JdbcPropertyDao: row
      JdbcPropertyDao-->>PropertyServiceImpl: Optional<PropertyRow> (present)
      PropertyServiceImpl-->>PropertyController: PropertyDetailResponse
      PropertyController-->>Client: ApiResponse{ data: PropertyDetailResponse, message: "OK" }
    else not found
      DB-->>JdbcPropertyDao: empty
      JdbcPropertyDao-->>PropertyServiceImpl: Optional.empty()
      PropertyServiceImpl->>PropertyController: throws ApiException(PROPERTY_NOT_FOUND)
      PropertyController-->>Client: 404 ErrorResponse{ code: "PROPERTY_NOT_FOUND" }
    end
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • ssafy-salman/salmanhae#6: Both PRs directly modify the backend's Spring Boot baseline—especially backend/pom.xml—where the main PR extends the dependencies from the setup PR (adding JDBC/web/validation, PostgreSQL, and H2 test support).

Poem

🐰 A bunny hopped through fields of code,
Laid down some DTOs on the road.
With bounds to check and JDBCs to query,
The properties table need not worry.
ApiResponse.ok() — all is well!
Four rows of data have a home to dwell. 🏠

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description check ✅ Passed The PR description covers required sections: change summary (변경 내용), linked issue (#9), test status (모두 통과), and notes on excluded features. However, it does not include a dedicated '리뷰 포인트' (review points) section, though this is optional.
Linked Issues check ✅ Passed All primary objectives from issue #9 are met: bounds search endpoints, property detail lookup, common response envelope, error handling (PROPERTY_NOT_FOUND/INVALID_BOUNDS/INVALID_REQUEST), Service-layer business logic, Controller-level validation, and passing tests.
Out of Scope Changes check ✅ Passed Changes align with issue #9 Phase 1 F-1 scope. The PR correctly excludes F-4 features (safety summary, region price layer, transaction comparison) and MVP exclusions. The .codex/hooks.json update for PowerShell escaping is a minor infrastructure fix unrelated to the main feature but acceptable as housekeeping.
Title check ✅ Passed The title clearly summarizes the main change: implementing a property search API for map bounds lookup in Phase 1, with appropriate Korean terminology matching the domain.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch phase/1-property-api-be

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (4)
backend/src/main/java/com/ssafy/salmanhae/common/response/ListResponse.java (1)

10-12: ⚡ Quick win

Snapshot items before computing totalCount.

Using the original mutable list reference can lead to items and totalCount drifting if the list is modified after construction.

💡 Suggested patch
 	public static <T> ListResponse<T> from(List<T> items) {
-		return new ListResponse<>(items, items.size());
+		List<T> snapshot = List.copyOf(items);
+		return new ListResponse<>(snapshot, snapshot.size());
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/src/main/java/com/ssafy/salmanhae/common/response/ListResponse.java`
around lines 10 - 12, The from method in the ListResponse class is passing the
mutable list reference directly to the constructor, which can cause totalCount
to drift if the original list is modified after construction. Create a snapshot
of the items list (such as using a copy constructor or list copy method like
List.copyOf() or new ArrayList<>(items)) and pass this immutable snapshot to the
constructor instead of the original items reference, ensuring the totalCount
remains consistent with the stored items regardless of external modifications to
the source list.
backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java (1)

31-58: ⚡ Quick win

Consider pagination for the list endpoint.

The bounds-based search returns all matching properties within the specified area without pagination. For dense urban areas, this could return hundreds or thousands of results, impacting client performance and bandwidth.

While not required for Phase 1, consider adding pagination parameters (page, size) in a future iteration to support incremental loading as users pan/zoom the map.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java`
around lines 31 - 58, Add pagination support to the searchProperties method in
PropertyController by including page and size request parameters (with sensible
defaults), updating the PropertySearchCriteria class to accept and store these
pagination values, and modifying the propertyService.searchProperties call to
use pagination when executing the query to limit results and improve performance
for areas with large numbers of properties.
backend/src/main/resources/application.properties (1)

2-5: 💤 Low value

Consider adding documentation for required environment variables.

The datasource configuration uses empty defaults, which will cause startup failure if environment variables are not set. While this fail-fast behavior is appropriate for production, adding a comment documenting the required variables would improve developer experience.

📝 Suggested documentation comment
 spring.application.name=salmanhae
+# Required environment variables:
+#   SUPABASE_DB_URL - PostgreSQL JDBC connection string (e.g., jdbc:postgresql://host:port/database)
+#   SUPABASE_DB_USERNAME - Database username
+#   SUPABASE_DB_PASSWORD - Database password
 spring.datasource.url=${SUPABASE_DB_URL:}
 spring.datasource.username=${SUPABASE_DB_USERNAME:}
 spring.datasource.password=${SUPABASE_DB_PASSWORD:}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@backend/src/main/resources/application.properties` around lines 2 - 5, The
datasource configuration properties spring.datasource.url,
spring.datasource.username, and spring.datasource.password use empty defaults
for environment variables SUPABASE_DB_URL, SUPABASE_DB_USERNAME, and
SUPABASE_DB_PASSWORD respectively, but lack documentation. Add clear comments
above these properties documenting that these environment variables are required
and must be set for the application to start successfully, explaining what each
variable is used for to improve developer experience.
backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyHttpIntegrationTest.java (1)

22-47: ⚡ Quick win

Consider splitting into separate test methods for better isolation.

This single test method verifies three distinct scenarios: list endpoint success, detail endpoint success, and not-found error. Splitting these into separate test methods would improve test clarity and ensure that if one assertion fails, the others still run.

♻️ Suggested refactor
 	`@Test`
-	void propertyEndpointsRespondOverHttp() {
+	void listEndpointReturnsOkWithValidBounds() {
 		ResponseEntity<Map> listResponse = restTemplate.getForEntity(
 				"/api/v1/properties?west=126.93&east=126.94&south=37.46&north=37.48",
 				Map.class
 		);
 
 		assertThat(listResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
 		assertThat(listResponse.getBody()).containsEntry("message", "OK");
+	}
 
+	`@Test`
+	void detailEndpointReturnsOkForExistingProperty() {
 		ResponseEntity<Map> detailResponse = restTemplate.getForEntity(
 				"/api/v1/properties/1",
 				Map.class
 		);
 
 		assertThat(detailResponse.getStatusCode()).isEqualTo(HttpStatus.OK);
 		assertThat(detailResponse.getBody()).containsEntry("message", "OK");
+	}
 
+	`@Test`
+	void detailEndpointReturnsNotFoundForMissingProperty() {
 		ResponseEntity<Map> notFoundResponse = restTemplate.getForEntity(
 				"/api/v1/properties/9999",
 				Map.class
 		);
 
 		assertThat(notFoundResponse.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
 		assertThat(notFoundResponse.getBody()).containsEntry("code", "PROPERTY_NOT_FOUND");
 	}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyHttpIntegrationTest.java`
around lines 22 - 47, The propertyEndpointsRespondOverHttp test method is
testing three distinct scenarios in a single test: list endpoint success, detail
endpoint success, and not-found error. Split this into three separate test
methods with descriptive names (such as testPropertyListEndpoint,
testPropertyDetailEndpoint, and testPropertyDetailNotFound) where each method
tests only one scenario. This improves test isolation and clarity, ensuring that
if one assertion fails, the others can still execute independently.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@backend/src/main/java/com/ssafy/salmanhae/common/exception/GlobalExceptionHandler.java`:
- Around line 20-24: The GlobalExceptionHandler is currently mapping
IllegalArgumentException to a 400 INVALID_REQUEST status code along with
MissingServletRequestParameterException and MethodArgumentTypeMismatchException.
This is problematic because IllegalArgumentException can be thrown from
service/DAO code for legitimate server-side errors, not just invalid client
requests. Remove IllegalArgumentException from the ExceptionHandler annotation
on the handler method that processes MissingServletRequestParameterException and
MethodArgumentTypeMismatchException to keep this handler scoped only to
request-binding validation exceptions and prevent masking of actual server
defects.

In
`@backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java`:
- Around line 39-42: The PropertyController accepts minDeposit, maxDeposit,
minPrice, and maxPrice request parameters but does not validate them before use.
You need to invoke the validateBounds() method on the PropertySearchCriteria
object before passing it to the service layer. Additionally, add validation to
ensure all filter values are non-negative (minDeposit, maxDeposit, minPrice,
maxPrice should all be >= 0) to prevent invalid data from being processed.

In
`@backend/src/main/java/com/ssafy/salmanhae/model/dao/property/JdbcPropertyDao.java`:
- Around line 76-77: Remove the LIMIT 500 clause from the SQL query in the list
query method of JdbcPropertyDao. In the sql.append() call that currently appends
" ORDER BY id ASC LIMIT 500", remove the " LIMIT 500" portion so it only appends
" ORDER BY id ASC". This will allow the query to return all active properties
within the specified bounds without silent truncation, maintaining the contract
of the list endpoint.

In
`@backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertySearchCriteria.java`:
- Around line 37-42: The PropertySearchCriteria class currently validates that
minDeposit is not greater than maxDeposit and minPrice is not greater than
maxPrice, but it does not validate that these values are non-negative. Add
validation checks after the existing comparison validations to ensure that
minDeposit, maxDeposit, minPrice, and maxPrice are all non-negative values
(i.e., >= 0). Throw an ApiException with ErrorCode.INVALID_REQUEST if any of
these fields contain a negative value, similar to the existing ordering
validation logic.

In
`@backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyControllerTest.java`:
- Around line 39-54: The test method
searchPropertiesAppliesTransactionAndPropertyFilters validates price filtering
but does not test the deposit filtering functionality (minDeposit and maxDeposit
parameters) that was implemented in the controller and criteria layer. Add new
test methods that perform API requests with minDeposit and maxDeposit
parameters, similar to how the existing test exercises minPrice and maxPrice.
Include assertions to verify that the deposit range filters correctly return the
expected properties with matching deposit amounts.
- Around line 56-66: The test searchPropertiesRejectsInvalidBounds currently
only validates that invalid longitude bounds (west > east) are rejected, but
does not cover the case where latitude bounds are invalid (south > north). Add a
new test method similar to searchPropertiesRejectsInvalidBounds that performs a
GET request to the /api/v1/properties endpoint with valid longitude parameters
but with south greater than north (for example, south="37.48" and north="37.46")
to ensure the API rejects this invalid latitude bounds scenario and returns a
400 Bad Request response with the appropriate error code.

---

Nitpick comments:
In `@backend/src/main/java/com/ssafy/salmanhae/common/response/ListResponse.java`:
- Around line 10-12: The from method in the ListResponse class is passing the
mutable list reference directly to the constructor, which can cause totalCount
to drift if the original list is modified after construction. Create a snapshot
of the items list (such as using a copy constructor or list copy method like
List.copyOf() or new ArrayList<>(items)) and pass this immutable snapshot to the
constructor instead of the original items reference, ensuring the totalCount
remains consistent with the stored items regardless of external modifications to
the source list.

In
`@backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java`:
- Around line 31-58: Add pagination support to the searchProperties method in
PropertyController by including page and size request parameters (with sensible
defaults), updating the PropertySearchCriteria class to accept and store these
pagination values, and modifying the propertyService.searchProperties call to
use pagination when executing the query to limit results and improve performance
for areas with large numbers of properties.

In `@backend/src/main/resources/application.properties`:
- Around line 2-5: The datasource configuration properties
spring.datasource.url, spring.datasource.username, and
spring.datasource.password use empty defaults for environment variables
SUPABASE_DB_URL, SUPABASE_DB_USERNAME, and SUPABASE_DB_PASSWORD respectively,
but lack documentation. Add clear comments above these properties documenting
that these environment variables are required and must be set for the
application to start successfully, explaining what each variable is used for to
improve developer experience.

In
`@backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyHttpIntegrationTest.java`:
- Around line 22-47: The propertyEndpointsRespondOverHttp test method is testing
three distinct scenarios in a single test: list endpoint success, detail
endpoint success, and not-found error. Split this into three separate test
methods with descriptive names (such as testPropertyListEndpoint,
testPropertyDetailEndpoint, and testPropertyDetailNotFound) where each method
tests only one scenario. This improves test isolation and clarity, ensuring that
if one assertion fails, the others can still execute independently.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 5868a9a0-0a06-4a09-889a-92c492e3456f

📥 Commits

Reviewing files that changed from the base of the PR and between 15bb781 and 9b7c9f4.

📒 Files selected for processing (27)
  • backend/pom.xml
  • backend/src/main/java/com/ssafy/salmanhae/common/exception/ApiException.java
  • backend/src/main/java/com/ssafy/salmanhae/common/exception/ErrorCode.java
  • backend/src/main/java/com/ssafy/salmanhae/common/exception/ErrorResponse.java
  • backend/src/main/java/com/ssafy/salmanhae/common/exception/GlobalExceptionHandler.java
  • backend/src/main/java/com/ssafy/salmanhae/common/response/ApiResponse.java
  • backend/src/main/java/com/ssafy/salmanhae/common/response/ListResponse.java
  • backend/src/main/java/com/ssafy/salmanhae/controller/property/PropertyController.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dao/property/JdbcPropertyDao.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dao/property/PropertyDao.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyDetailResponse.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyRow.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertySearchCriteria.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertySummaryResponse.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/PropertyType.java
  • backend/src/main/java/com/ssafy/salmanhae/model/dto/property/TransactionType.java
  • backend/src/main/java/com/ssafy/salmanhae/service/property/PropertyService.java
  • backend/src/main/java/com/ssafy/salmanhae/service/property/PropertyServiceImpl.java
  • backend/src/main/resources/application.properties
  • backend/src/test/java/com/ssafy/salmanhae/SalmanhaeApplicationTests.java
  • backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyControllerTest.java
  • backend/src/test/java/com/ssafy/salmanhae/controller/property/PropertyHttpIntegrationTest.java
  • backend/src/test/resources/application-test.properties
  • backend/src/test/resources/data.sql
  • backend/src/test/resources/schema.sql
  • phases/property-api-be/phase1-property-api-be.md
  • phases/property-api-be/phase1.status.json

Comment thread backend/src/main/java/com/ssafy/salmanhae/model/dao/property/JdbcPropertyDao.java Outdated
@HOKAGO-MEMORIES HOKAGO-MEMORIES changed the title [Phase 1] property api be [codex] [Phase 1] feat(property): 지도 범위 매물 조회 API 구현 [codex] Jun 18, 2026
@HOKAGO-MEMORIES HOKAGO-MEMORIES changed the title [Phase 1] feat(property): 지도 범위 매물 조회 API 구현 [codex] [Phase 1] feat(property): 지도 범위 내 매물 조회 API 구현 [ai] Jun 18, 2026
@HOKAGO-MEMORIES HOKAGO-MEMORIES changed the title [Phase 1] feat(property): 지도 범위 내 매물 조회 API 구현 [ai] [Phase 1] feat(property): 지도 범위 내 매물 조회 API 구현 Jun 18, 2026
@HOKAGO-MEMORIES
HOKAGO-MEMORIES merged commit 582a7e2 into develop Jun 18, 2026
1 check passed
@HOKAGO-MEMORIES
HOKAGO-MEMORIES deleted the phase/1-property-api-be branch June 25, 2026 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Phase 1] property-api-be

1 participant