package house import ( "context" listingv1 "service.xpcool.com/api/house/listing" "service.xpcool.com/internal/model/dto" listing "service.xpcool.com/internal/service/house/listing" ) // ListingList 分页查询房源(带多维筛选)。 func (c *Controller) ListingList(ctx context.Context, req *listingv1.ListingListReq) (res *listingv1.ListingListRes, err error) { list, total, err := listing.Listing().List(ctx, dto.HouseListingFilter{ Page: req.Page, Size: req.Size, CommunityId: req.CommunityId, Keyword: req.Keyword, Layout: req.Layout, Region: req.Region, Source: req.Source, PriceMin: req.PriceMin, PriceMax: req.PriceMax, AreaMin: req.AreaMin, AreaMax: req.AreaMax, Status: req.Status, IsBargain: req.IsBargain, Confidence: req.Confidence, }) if err != nil { return nil, err } out := make([]*listingv1.ListingItem, 0, len(list)) for i := range list { v := &list[i] out = append(out, &listingv1.ListingItem{ Id: v.Id, CommunityId: v.CommunityId, CommunityName: v.CommunityName, BuildingId: v.BuildingId, HouseNo: v.HouseNo, Layout: v.Layout, Area: v.Area, UsableArea: v.UsableArea, Orientation: v.Orientation, Floor: v.Floor, TotalFloors: v.TotalFloors, Decoration: v.Decoration, TotalPrice: v.TotalPrice, UnitPrice: v.UnitPrice, ListPrice: v.ListPrice, Source: v.Source, SourceHouseId: v.SourceHouseId, SourceUrl: v.SourceUrl, MatchGroupId: v.MatchGroupId, OnMarketDays: v.OnMarketDays, PriceChangeCount: v.PriceChangeCount, Status: v.Status, Confidence: v.Confidence, IsBargain: v.IsBargain, ListingTime: v.ListingTime, CreatedAt: v.CreatedAt, }) } return &listingv1.ListingListRes{List: out, Total: total}, nil } // ListingCreate 新增房源。 func (c *Controller) ListingCreate(ctx context.Context, req *listingv1.ListingCreateReq) (res *listingv1.ListingCreateRes, err error) { id, err := listing.Listing().Create(ctx, dto.HouseListingInput{ CommunityId: req.CommunityId, BuildingId: req.BuildingId, HouseNo: req.HouseNo, Layout: req.Layout, Area: req.Area, UsableArea: req.UsableArea, Orientation: req.Orientation, Floor: req.Floor, TotalFloors: req.TotalFloors, Decoration: req.Decoration, TotalPrice: req.TotalPrice, UnitPrice: req.UnitPrice, ListPrice: req.ListPrice, Source: req.Source, SourceHouseId: req.SourceHouseId, SourceUrl: req.SourceUrl, MatchGroupId: req.MatchGroupId, OnMarketDays: req.OnMarketDays, PriceChangeCount: req.PriceChangeCount, Status: req.Status, Confidence: req.Confidence, IsBargain: req.IsBargain, }) if err != nil { return nil, err } return &listingv1.ListingCreateRes{Id: id}, nil } // ListingUpdate 更新房源。 func (c *Controller) ListingUpdate(ctx context.Context, req *listingv1.ListingUpdateReq) (res *listingv1.ListingUpdateRes, err error) { err = listing.Listing().Update(ctx, dto.HouseListingInput{ Id: req.Id, CommunityId: req.CommunityId, BuildingId: req.BuildingId, HouseNo: req.HouseNo, Layout: req.Layout, Area: req.Area, UsableArea: req.UsableArea, Orientation: req.Orientation, Floor: req.Floor, TotalFloors: req.TotalFloors, Decoration: req.Decoration, TotalPrice: req.TotalPrice, UnitPrice: req.UnitPrice, ListPrice: req.ListPrice, MatchGroupId: req.MatchGroupId, Status: req.Status, Confidence: req.Confidence, IsBargain: req.IsBargain, }) if err != nil { return nil, err } return &listingv1.ListingUpdateRes{}, nil } // ListingDelete 删除房源。 func (c *Controller) ListingDelete(ctx context.Context, req *listingv1.ListingDeleteReq) (res *listingv1.ListingDeleteRes, err error) { if err = listing.Listing().Delete(ctx, req.Id); err != nil { return nil, err } return &listingv1.ListingDeleteRes{}, nil } // ListingBatchMark 批量标记房源。 func (c *Controller) ListingBatchMark(ctx context.Context, req *listingv1.ListingBatchMarkReq) (res *listingv1.ListingBatchMarkRes, err error) { affected, err := listing.Listing().BatchMark(ctx, req.Ids, req.Field, req.Value) if err != nil { return nil, err } return &listingv1.ListingBatchMarkRes{Affected: affected}, nil }