Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions terraso_backend/apps/graphql/schema/schema.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -1565,7 +1565,7 @@ enum SoilIdDepthDependentSoilDataCarbonatesChoices {

type SoilMetadataNode {
site: SiteNode!
userRatings: [UserRatingEntry]!
userRatings: [UserRatingEntry!]!
selectedSoilId: String
}

Expand Down Expand Up @@ -1683,9 +1683,9 @@ type Mutations {
deleteUserFromProject(input: ProjectDeleteUserMutationInput!): ProjectDeleteUserMutationPayload!
updateUserRoleInProject(input: ProjectUpdateUserRoleMutationInput!): ProjectUpdateUserRoleMutationPayload!
markProjectSeen(input: ProjectMarkSeenMutationInput!): ProjectMarkSeenMutationPayload!
updateSoilData(input: SoilDataUpdateMutationInput!): SoilDataUpdateMutationPayload! @deprecated(reason: "Use push_site_data instead.")
updateDepthDependentSoilData(input: DepthDependentSoilDataUpdateMutationInput!): DepthDependentSoilDataUpdateMutationPayload! @deprecated(reason: "Use push_site_data instead.")
pushSoilData(input: SoilDataPushInput!): SoilDataPushPayload! @deprecated(reason: "Use push_site_data instead.")
updateSoilData(input: SoilDataUpdateMutationInput!): SoilDataUpdateMutationPayload! @deprecated(reason: "Use push_user_data instead.")
updateDepthDependentSoilData(input: DepthDependentSoilDataUpdateMutationInput!): DepthDependentSoilDataUpdateMutationPayload! @deprecated(reason: "Use push_user_data instead.")
pushSoilData(input: SoilDataPushInput!): SoilDataPushPayload! @deprecated(reason: "Use push_user_data instead.")

"""
To enable offline functionality.
Expand All @@ -1695,10 +1695,10 @@ type Mutations {

Partial updates are possible, if failure happens at the level of a sub-mutation, or more granularly within the sub-mutation.
"""
pushSiteData(input: SiteDataPushInput!): SiteDataPushPayload!
updateSoilDataDepthInterval(input: SoilDataUpdateDepthIntervalMutationInput!): SoilDataUpdateDepthIntervalMutationPayload! @deprecated(reason: "Use push_site_data instead.")
deleteSoilDataDepthInterval(input: SoilDataDeleteDepthIntervalMutationInput!): SoilDataDeleteDepthIntervalMutationPayload! @deprecated(reason: "Use push_site_data instead.")
updateSoilMetadata(input: SoilMetadataUpdateMutationInput!): SoilMetadataUpdateMutationPayload!
pushUserData(input: UserDataPushInput!): UserDataPushPayload!
updateSoilDataDepthInterval(input: SoilDataUpdateDepthIntervalMutationInput!): SoilDataUpdateDepthIntervalMutationPayload! @deprecated(reason: "Use push_user_data instead.")
deleteSoilDataDepthInterval(input: SoilDataDeleteDepthIntervalMutationInput!): SoilDataDeleteDepthIntervalMutationPayload! @deprecated(reason: "Use push_user_data instead.")
updateSoilMetadata(input: SoilMetadataUpdateMutationInput!): SoilMetadataUpdateMutationPayload! @deprecated(reason: "Use push_user_data instead.")
updateProjectSoilSettings(input: ProjectSoilSettingsUpdateMutationInput!): ProjectSoilSettingsUpdateMutationPayload!
updateProjectSoilSettingsDepthInterval(input: ProjectSoilSettingsUpdateDepthIntervalMutationInput!): ProjectSoilSettingsUpdateDepthIntervalMutationPayload!
deleteProjectSoilSettingsDepthInterval(input: ProjectSoilSettingsDeleteDepthIntervalMutationInput!): ProjectSoilSettingsDeleteDepthIntervalMutationPayload!
Expand Down Expand Up @@ -2437,12 +2437,10 @@ Pushes at least one of the following sub-mutations:

Partial updates are possible, if failure happens at the level of a sub-mutation, or more granularly within the sub-mutation.
"""
type SiteDataPushPayload {
type UserDataPushPayload {
errors: GenericScalar
soilDataResults: [SoilDataPushEntry!]
soilDataError: String
soilMetadataResults: [SoilMetadataPushEntry!]
soilMetadataError: String
clientMutationId: String
}

Expand All @@ -2467,7 +2465,7 @@ enum SoilMetadataPushFailureReason {
INVALID_DATA
}

input SiteDataPushInput {
input UserDataPushInput {
soilDataEntries: [SoilDataPushInputEntry!] = null
soilMetadataEntries: [SoilMetadataPushInputEntry!] = null
clientMutationId: String
Expand Down
18 changes: 10 additions & 8 deletions terraso_backend/apps/graphql/schema/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
SiteNoteDeleteMutation,
SiteNoteUpdateMutation,
)
from apps.soil_id.graphql.site_data.push_mutation import SiteDataPush
from apps.soil_id.graphql.soil_data.mutations import (
DepthDependentSoilDataUpdateMutation,
SoilDataDeleteDepthIntervalMutation,
Expand All @@ -47,6 +46,7 @@
ProjectSoilSettingsUpdateDepthIntervalMutation,
ProjectSoilSettingsUpdateMutation,
)
from apps.soil_id.graphql.sync.push_mutation import UserDataPush

from .commons import TerrasoRelayNode
from .data_entries import (
Expand Down Expand Up @@ -193,20 +193,22 @@ class Mutations(graphene.ObjectType):
update_user_role_in_project = ProjectUpdateUserRoleMutation.Field()
mark_project_seen = ProjectMarkSeenMutation.Field()
update_soil_data = SoilDataUpdateMutation.Field(
deprecation_reason="Use push_site_data instead."
deprecation_reason="Use push_user_data instead."
)
update_depth_dependent_soil_data = DepthDependentSoilDataUpdateMutation.Field(
deprecation_reason="Use push_site_data instead."
deprecation_reason="Use push_user_data instead."
)
push_soil_data = SoilDataPush.Field(deprecation_reason="Use push_site_data instead.")
push_site_data = SiteDataPush.Field()
push_soil_data = SoilDataPush.Field(deprecation_reason="Use push_user_data instead.")
push_user_data = UserDataPush.Field()
update_soil_data_depth_interval = SoilDataUpdateDepthIntervalMutation.Field(
deprecation_reason="Use push_site_data instead."
deprecation_reason="Use push_user_data instead."
)
delete_soil_data_depth_interval = SoilDataDeleteDepthIntervalMutation.Field(
deprecation_reason="Use push_site_data instead."
deprecation_reason="Use push_user_data instead."
)
update_soil_metadata = SoilMetadataUpdateMutation.Field(
deprecation_reason="Use push_user_data instead."
)
update_soil_metadata = SoilMetadataUpdateMutation.Field()
update_project_soil_settings = ProjectSoilSettingsUpdateMutation.Field()
update_project_soil_settings_depth_interval = (
ProjectSoilSettingsUpdateDepthIntervalMutation.Field()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class SoilMetadataPushInputEntry(graphene.InputObjectType):

class SoilMetadataPush(BaseWriteMutation):
"""
Note: as of 2025-10 this mutation is not exposed on its own; it is only used as part of SiteDataPush (similar to how SiteDataPush uses SoilDataPush).
Note: as of 2025-10 this mutation is not exposed on its own; it is only used as part of UserDataPush (similar to how UserDataPush uses SoilDataPush).
"""

results = graphene.Field(graphene.List(graphene.NonNull(SoilMetadataPushEntry)), required=True)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class SoilMetadataNode(DjangoObjectType):
selected_soil_id = graphene.String()

# New field: expose user_ratings as a list
user_ratings = graphene.List(UserRatingEntry, required=True)
user_ratings = graphene.List(graphene.NonNull(UserRatingEntry), required=True)

class Meta:
model = SoilMetadata
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
logger = structlog.get_logger(__name__)


class SiteDataPush(BaseWriteMutation):
class UserDataPush(BaseWriteMutation):
"""
To enable offline functionality.
Pushes at least one of the following sub-mutations:
Expand All @@ -45,11 +45,9 @@ class SiteDataPush(BaseWriteMutation):
soil_data_results = graphene.Field(
graphene.List(graphene.NonNull(SoilDataPushEntry)), required=False
)
soil_data_error = graphene.String()
soil_metadata_results = graphene.Field(
graphene.List(graphene.NonNull(SoilMetadataPushEntry)), required=False
)
soil_metadata_error = graphene.String()

class Input:
soil_data_entries = graphene.Field(graphene.List(graphene.NonNull(SoilDataPushInputEntry)))
Expand All @@ -68,33 +66,21 @@ def mutate_and_get_payload(cls, root, info, **kwargs):
)

soil_data_results = None
soil_data_error = None
soil_metadata_results = None
soil_metadata_error = None

if soil_data_entries:
try:
result = SoilDataPush.mutate_and_get_payload(
root, info, soil_data_entries=soil_data_entries
)
soil_data_results = result.results
except Exception as e:
logger.exception("Unexpected error pushing soil data entries")
soil_data_error = str(e)
result = SoilDataPush.mutate_and_get_payload(
root, info, soil_data_entries=soil_data_entries
)
soil_data_results = result.results

if soil_metadata_entries:
try:
result = SoilMetadataPush.mutate_and_get_payload(
root, info, soil_metadata_entries=soil_metadata_entries
)
soil_metadata_results = result.results
except Exception as e:
logger.exception("Unexpected error pushing soil metadata entries")
soil_metadata_error = str(e)
result = SoilMetadataPush.mutate_and_get_payload(
root, info, soil_metadata_entries=soil_metadata_entries
)
soil_metadata_results = result.results

return cls(
soil_data_results=soil_data_results,
soil_data_error=soil_data_error,
soil_metadata_results=soil_metadata_results,
soil_metadata_error=soil_metadata_error,
)
Loading