Cleaned unused functions and files
This commit is contained in:
parent
a9ab42eda5
commit
ea14d89584
163
backend/app.py
163
backend/app.py
@ -13,10 +13,20 @@ CORS(app, supports_credentials=True) # allow cookies
|
|||||||
# Directories
|
# Directories
|
||||||
DATA_DIR = "data"
|
DATA_DIR = "data"
|
||||||
USERS_FILE = os.path.join(DATA_DIR, "users.json")
|
USERS_FILE = os.path.join(DATA_DIR, "users.json")
|
||||||
|
JOURNEYS_FILE = os.path.join(DATA_DIR, 'journeys.json')
|
||||||
os.makedirs(DATA_DIR, exist_ok=True)
|
os.makedirs(DATA_DIR, exist_ok=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ==================== User helpers ====================
|
# ==================== User helpers ====================
|
||||||
|
def require_login():
|
||||||
|
if "user_id" not in session:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
def get_current_user_id():
|
||||||
|
return session.get("user_id")
|
||||||
|
|
||||||
def load_users():
|
def load_users():
|
||||||
try:
|
try:
|
||||||
if os.path.exists(USERS_FILE):
|
if os.path.exists(USERS_FILE):
|
||||||
@ -49,99 +59,7 @@ def get_user_by_username(username):
|
|||||||
def get_user_by_id(user_id):
|
def get_user_by_id(user_id):
|
||||||
users = load_users()
|
users = load_users()
|
||||||
return next((u for u in users if u["id"] == user_id), None)
|
return next((u for u in users if u["id"] == user_id), None)
|
||||||
|
|
||||||
# Central journeys storage
|
|
||||||
JOURNEYS_FILE = os.path.join(DATA_DIR, 'journeys.json')
|
|
||||||
|
|
||||||
def load_all_journeys():
|
|
||||||
try:
|
|
||||||
if os.path.exists(JOURNEYS_FILE):
|
|
||||||
with open(JOURNEYS_FILE, 'r') as f:
|
|
||||||
return json.load(f)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error loading journeys: {e}")
|
|
||||||
return []
|
|
||||||
|
|
||||||
def save_all_journeys(journeys):
|
|
||||||
try:
|
|
||||||
with open(JOURNEYS_FILE, 'w') as f:
|
|
||||||
json.dump(journeys, f, indent=2)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error saving journeys: {e}")
|
|
||||||
|
|
||||||
def get_next_journey_id(journeys):
|
|
||||||
if not journeys:
|
|
||||||
return 1
|
|
||||||
return max(j['id'] for j in journeys) + 1
|
|
||||||
|
|
||||||
def get_journey_by_id(journey_id):
|
|
||||||
journeys = load_all_journeys()
|
|
||||||
return next((j for j in journeys if j['id'] == journey_id), None)
|
|
||||||
|
|
||||||
def user_can_view_journey(journey, user_id):
|
|
||||||
if journey['owner_id'] == user_id:
|
|
||||||
return True
|
|
||||||
if journey.get('visibility') == 'public':
|
|
||||||
return True
|
|
||||||
if journey.get('visibility') == 'shared' and user_id in journey.get('shared_read', []):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
def user_can_edit_journey(journey, user_id):
|
|
||||||
if journey['owner_id'] == user_id:
|
|
||||||
return True
|
|
||||||
if journey.get('visibility') == 'shared' and user_id in journey.get('shared_edit', []):
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
# ==================== Per‑user data helpers ====================
|
|
||||||
def get_user_data_dir(user_id):
|
|
||||||
user_dir = os.path.join(DATA_DIR, "users", str(user_id))
|
|
||||||
os.makedirs(user_dir, exist_ok=True)
|
|
||||||
return user_dir
|
|
||||||
|
|
||||||
|
|
||||||
def load_user_journeys(user_id):
|
|
||||||
file_path = os.path.join(get_user_data_dir(user_id), "journeys.json")
|
|
||||||
try:
|
|
||||||
if os.path.exists(file_path):
|
|
||||||
with open(file_path, "r") as f:
|
|
||||||
return json.load(f)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error loading journeys for user {user_id}: {e}")
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def save_user_journeys(user_id, journeys):
|
|
||||||
file_path = os.path.join(get_user_data_dir(user_id), "journeys.json")
|
|
||||||
try:
|
|
||||||
with open(file_path, "w") as f:
|
|
||||||
json.dump(journeys, f, indent=2)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error saving journeys for user {user_id}: {e}")
|
|
||||||
|
|
||||||
|
|
||||||
def load_user_posts(user_id):
|
|
||||||
file_path = os.path.join(get_user_data_dir(user_id), "posts.json")
|
|
||||||
try:
|
|
||||||
if os.path.exists(file_path):
|
|
||||||
with open(file_path, "r") as f:
|
|
||||||
return json.load(f)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error loading posts for user {user_id}: {e}")
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def save_user_posts(user_id, posts):
|
|
||||||
file_path = os.path.join(get_user_data_dir(user_id), "posts.json")
|
|
||||||
try:
|
|
||||||
with open(file_path, "w") as f:
|
|
||||||
json.dump(posts, f, indent=2)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Error saving posts for user {user_id}: {e}")
|
|
||||||
|
|
||||||
|
|
||||||
# ==================== Authentication endpoints ====================
|
# ==================== Authentication endpoints ====================
|
||||||
@app.route("/api/register", methods=["POST"])
|
@app.route("/api/register", methods=["POST"])
|
||||||
def register():
|
def register():
|
||||||
@ -168,11 +86,7 @@ def register():
|
|||||||
}
|
}
|
||||||
users.append(new_user)
|
users.append(new_user)
|
||||||
save_users(users)
|
save_users(users)
|
||||||
|
|
||||||
# Create empty data files for the new user
|
|
||||||
save_user_journeys(new_id, [])
|
|
||||||
save_user_posts(new_id, [])
|
|
||||||
|
|
||||||
# Log the user in automatically
|
# Log the user in automatically
|
||||||
session["user_id"] = new_id
|
session["user_id"] = new_id
|
||||||
|
|
||||||
@ -215,23 +129,49 @@ def me():
|
|||||||
return jsonify({"error": "User not found"}), 401
|
return jsonify({"error": "User not found"}), 401
|
||||||
return jsonify({"id": user["id"], "username": user["username"]})
|
return jsonify({"id": user["id"], "username": user["username"]})
|
||||||
|
|
||||||
|
|
||||||
# ==================== Journey helper functions ====================
|
# ==================== Journey helper functions ====================
|
||||||
def require_login():
|
|
||||||
if "user_id" not in session:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
def load_all_journeys():
|
||||||
|
try:
|
||||||
|
if os.path.exists(JOURNEYS_FILE):
|
||||||
|
with open(JOURNEYS_FILE, 'r') as f:
|
||||||
|
return json.load(f)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error loading journeys: {e}")
|
||||||
|
return []
|
||||||
|
|
||||||
def get_current_user_id():
|
def save_all_journeys(journeys):
|
||||||
return session.get("user_id")
|
try:
|
||||||
|
with open(JOURNEYS_FILE, 'w') as f:
|
||||||
|
json.dump(journeys, f, indent=2)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error saving journeys: {e}")
|
||||||
|
|
||||||
|
def get_next_journey_id(journeys):
|
||||||
|
if not journeys:
|
||||||
|
return 1
|
||||||
|
return max(j['id'] for j in journeys) + 1
|
||||||
|
|
||||||
|
def get_journey_by_id(journey_id):
|
||||||
|
journeys = load_all_journeys()
|
||||||
|
return next((j for j in journeys if j['id'] == journey_id), None)
|
||||||
|
|
||||||
|
def user_can_view_journey(journey, user_id):
|
||||||
|
if journey['owner_id'] == user_id:
|
||||||
|
return True
|
||||||
|
if journey.get('visibility') == 'public':
|
||||||
|
return True
|
||||||
|
if journey.get('visibility') == 'shared' and user_id in journey.get('shared_read', []):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def user_can_edit_journey(journey, user_id):
|
||||||
|
if journey['owner_id'] == user_id:
|
||||||
|
return True
|
||||||
|
if journey.get('visibility') == 'shared' and user_id in journey.get('shared_edit', []):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def get_journeys_for_current_user():
|
|
||||||
user_id = get_current_user_id()
|
|
||||||
if user_id is None:
|
|
||||||
return None
|
|
||||||
return load_user_journeys(user_id)
|
|
||||||
|
|
||||||
# ==================== Journey endpoints ====================
|
# ==================== Journey endpoints ====================
|
||||||
@app.route('/api/journeys', methods=['GET'])
|
@app.route('/api/journeys', methods=['GET'])
|
||||||
@ -341,9 +281,6 @@ def delete_journey(journey_id):
|
|||||||
save_all_journeys(journeys)
|
save_all_journeys(journeys)
|
||||||
return jsonify({'message': 'Journey deleted successfully', 'journey': journey})
|
return jsonify({'message': 'Journey deleted successfully', 'journey': journey})
|
||||||
|
|
||||||
# ==================== Journey endpoints (already present) ====================
|
|
||||||
# (Keep the existing journey endpoints: GET /api/journeys, POST, etc.)
|
|
||||||
|
|
||||||
# ==================== Comments (stored inside journeys) ====================
|
# ==================== Comments (stored inside journeys) ====================
|
||||||
def save_journey(journey):
|
def save_journey(journey):
|
||||||
journeys = load_all_journeys()
|
journeys = load_all_journeys()
|
||||||
|
|||||||
@ -46,5 +46,74 @@
|
|||||||
"created_at": "2026-03-28T17:47:56.571469"
|
"created_at": "2026-03-28T17:47:56.571469"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"owner_id": 3,
|
||||||
|
"title": "New Journey",
|
||||||
|
"description": "test",
|
||||||
|
"markers": [
|
||||||
|
{
|
||||||
|
"lat": 46.89023157359399,
|
||||||
|
"lng": 6.789550781250001,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lat": 47.05141149430736,
|
||||||
|
"lng": 10.4205322265625,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lat": 46.58906908309185,
|
||||||
|
"lng": 10.310668945312502,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lat": 46.05417324177818,
|
||||||
|
"lng": 5.009765625000001,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lat": 45.537136680398596,
|
||||||
|
"lng": 7.448730468750001,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lat": 45.54867850352087,
|
||||||
|
"lng": 10.678710937500002,
|
||||||
|
"title": "New Marker",
|
||||||
|
"date": "",
|
||||||
|
"description": "",
|
||||||
|
"videoUrl": ""
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"created_at": "2026-03-29T10:54:18.332527",
|
||||||
|
"visibility": "public",
|
||||||
|
"shared_read": [],
|
||||||
|
"shared_edit": [],
|
||||||
|
"comments": [
|
||||||
|
{
|
||||||
|
"id": 1774774657963,
|
||||||
|
"author_id": 1,
|
||||||
|
"author_name": "josh",
|
||||||
|
"text": "test",
|
||||||
|
"created_at": "2026-03-29T10:57:37.963970"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -10,5 +10,11 @@
|
|||||||
"username": "test1",
|
"username": "test1",
|
||||||
"password_hash": "scrypt:32768:8:1$hPfITQadZq8438bv$38262bf82d93c596a82a1b052a4ba72f8d6729b796ca5273faa7dd47b409112959c4501e77922605a1f3a7ef08e68fa545ce03818eb82e6fb2503cc817c43e2a",
|
"password_hash": "scrypt:32768:8:1$hPfITQadZq8438bv$38262bf82d93c596a82a1b052a4ba72f8d6729b796ca5273faa7dd47b409112959c4501e77922605a1f3a7ef08e68fa545ce03818eb82e6fb2503cc817c43e2a",
|
||||||
"created_at": "2026-03-28T14:13:32.860143"
|
"created_at": "2026-03-28T14:13:32.860143"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"username": "test2",
|
||||||
|
"password_hash": "scrypt:32768:8:1$iZJWgiHFhaN845sv$553a61855a32752aaca7f5d9ac200f99f89d215250e561fb3bb52c46b8d8bd96d09a915969c00bd8cfbded78b70740852671dfb84c659203c92982e2708a10f2",
|
||||||
|
"created_at": "2026-03-29T10:53:39.433798"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@ -1,42 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"title": "test",
|
|
||||||
"description": "11",
|
|
||||||
"markers": [
|
|
||||||
{
|
|
||||||
"lat": 48.356249029540734,
|
|
||||||
"lng": 4.866943359375,
|
|
||||||
"title": "New Marker",
|
|
||||||
"date": "",
|
|
||||||
"description": "",
|
|
||||||
"videoUrl": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"lat": 46.961510504873104,
|
|
||||||
"lng": 9.371337890625002,
|
|
||||||
"title": "New Marker",
|
|
||||||
"date": "",
|
|
||||||
"description": "",
|
|
||||||
"videoUrl": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"lat": 45.51404592560427,
|
|
||||||
"lng": 11.656494140625002,
|
|
||||||
"title": "New Marker",
|
|
||||||
"date": "",
|
|
||||||
"description": "",
|
|
||||||
"videoUrl": ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"lat": 43.52465500687188,
|
|
||||||
"lng": 11.162109375,
|
|
||||||
"title": "New Marker",
|
|
||||||
"date": "",
|
|
||||||
"description": "",
|
|
||||||
"videoUrl": ""
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"created_at": "2026-03-27T21:49:26.885353"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@ -1,38 +0,0 @@
|
|||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"title": "test",
|
|
||||||
"content": "qwef",
|
|
||||||
"journeyId": null,
|
|
||||||
"image": null,
|
|
||||||
"author_id": 1,
|
|
||||||
"created_at": "2026-03-28T15:47:04.343616",
|
|
||||||
"visibility": "private",
|
|
||||||
"shared_read": [],
|
|
||||||
"shared_edit": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"title": "another test post",
|
|
||||||
"content": "sgadsfg",
|
|
||||||
"journeyId": null,
|
|
||||||
"image": null,
|
|
||||||
"author_id": 1,
|
|
||||||
"created_at": "2026-03-28T16:08:36.820019",
|
|
||||||
"visibility": "private",
|
|
||||||
"shared_read": [],
|
|
||||||
"shared_edit": []
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"title": "another post",
|
|
||||||
"content": "sfadfas",
|
|
||||||
"journeyId": null,
|
|
||||||
"image": null,
|
|
||||||
"author_id": 1,
|
|
||||||
"created_at": "2026-03-28T16:08:52.889611",
|
|
||||||
"visibility": "private",
|
|
||||||
"shared_read": [],
|
|
||||||
"shared_edit": []
|
|
||||||
}
|
|
||||||
]
|
|
||||||
@ -1 +0,0 @@
|
|||||||
[]
|
|
||||||
@ -1 +0,0 @@
|
|||||||
[]
|
|
||||||
Loading…
x
Reference in New Issue
Block a user