Plattformregeln und Richtlinien

Unsere Mission ist es, jedem überall Zugang zu angenehmen Angelerlebnissen zu ermöglichen.

Erfolgreicher Aufbau einer Online-Community beruht auf einer positiven, beidseitigen Beziehung zwischen Kapitänen, Guides, Charteranbietern (bekannt als Partner*) und ihren Kunden (bekannt als Kunden**). Dies erfordert ein Fundament des Vertrauens, basierend auf gemeinsamen Werten und Verhaltensweisen.

Aus diesem Grund haben wir bestimmte Erwartungen an das Verhalten und die Werte sowohl unserer Partner als auch unserer Kunden. Wir haben diese Plattformregeln und Richtlinien erstellt, um die Grundsätze darzulegen, die einen wesentlichen Bestandteil der Nutzungsbedingungen von FishingBooker für unsere Partner und Kunden gleichermaßen darstellen.

* Partner sind die Person, Agentur oder das Unternehmen, die für die Durchführung und Verwaltung des Angelausflugs verantwortlich sind, der über FishingBooker.com gebucht wird.
** Kunden sind die Person, Agentur oder das Unternehmen, die für Dienstleistungen bezahlen, die vom Anbieter über FishingBooker.com erbracht werden.

Grundprinzipien

Respekt und Professionalität

Unabhängig davon, ob Sie ein FishingBooker Partner oder Kunde sind, wird von Ihnen erwartet, dass Sie andere Nutzer und FishingBooker-Vertreter mit Respekt behandeln.

Ebenso werden alle FishingBooker-Vertreter Partner und Kunden mit Respekt behandeln.

Du solltest dich professionell und redlich verhalten, wenn du auf der FishingBooker-Plattform bist, und dein Geschäft ehrlich und fair führen. Unhöfliches oder unprofessionelles Verhalten ist nicht erlaubt und kann zur Entfernung von der Plattform führen.


Einhaltung der Gesetze

Du wirst erwartet, alle lokalen Gesetze und Vorschriften einzuhalten (einschließlich, aber nicht beschränkt auf das Angeln). Beteilige dich nicht an oder fördere kein Verhalten, das anderen Nutzern Schaden zufügen könnte.

Wir dulden keinerlei kriminelle Aktivitäten, Vandalismus oder Erpressung. Jede Art von illegaler oder gefährlicher Aktivität kann zur Deaktivierung Ihres Kontos führen.


Sicherheit

Die Sicherheit unserer Kunden, Partner und Vertreter hat für uns höchste Priorität. Jede Art von illegaler oder gefährlicher Aktivität kann zur Deaktivierung Ihres Kontos führen.

Unsere Regeln

Richtlinie gegen Diskriminierung

FishingBooker unterstützt Gleichheit, Akzeptanz und Respekt neben unserer gemeinsamen Leidenschaft für das Angeln. Wir erwarten von Ihnen, dass Sie dieselben Grundsätze befolgen, für die wir stehen, und anderen Nutzern mit Respekt begegnen.

Jegliche Art von Diskriminierung aufgrund von Rasse, Hautfarbe, ethnischer Herkunft, Nationalität, Religion, sexueller Orientierung, Behinderung, Gesundheit, Geschlechtsidentität, politischen Ansichten oder Familienstand während einer Angelcharter wird nicht toleriert und kann zum Ausschluss von der Plattform führen.

Wir dulden folgende Verhaltensweisen nicht:

  • Jeglicher Missbrauch, sei es körperlich, sexuell oder verbal, der gegen andere Nutzer oder Mitarbeiter von FishingBooker gerichtet ist;
  • Jede Art von Erpressung durch einen Benutzer gegenüber einem anderen;
  • Falsche Berichterstattung wird nicht toleriert. Bei der Meldung eines Vorfalls, der vor, während oder nach der Ausfahrt geschehen ist, muss der Nutzer FishingBooker wahrheitsgemäße und genaue Informationen zur Verfügung stellen;
  • Jegliche Falschinformation, einschließlich falscher Identitätsangaben. Alle Informationen, die bei der Erstellung eines Profils und/oder der Verifizierung der Benutzeridentität an FishingBooker übermittelt werden, müssen wahrheitsgemäß und korrekt sein. Gefälschte oder manipulierte Dokumente können zur Deaktivierung Ihres Kontos und zur Entfernung von unserer Plattform führen;

Die oben genannten Verhaltensweisen können zum Ausschluss des Partners oder Kunden von FishingBooker oder zur Deaktivierung Ihres Kontos führen.

Wir erlauben folgende Inhalte nicht:

Um sicherzustellen, dass alle Partner und Kunden mit Respekt behandelt werden und eine positive Erfahrung auf unserer Plattform haben, sollten Sie Folgendes nicht teilen oder erstellen:

  • Inhalte, die andere Benutzer diskriminieren;
  • Inhalte, die Spam enthalten, oder Inhalte, die wiederholt in störender Weise geteilt werden;
  • "Inhalte, die illegale oder schädliche Aktivitäten fördern oder die sexuell explizit, gewalttätig, grafisch, bedrohlich oder belästigend sind;"
  • Inhalte oder Kommunikation mit dem Ziel, eine andere Person oder Organisation, einschließlich eines Mitarbeiters von FishingBooker, zu imitieren;
  • Inhalte, die illegal sind oder die Rechte einer anderen Person oder Einrichtung verletzen, einschließlich geistiger Eigentumsrechte und Datenschutzrechte;
  • Inhalte, die private oder vertrauliche Informationen einer anderen Person enthalten;
  • Zu Werbezwecken erstellte Inhalte, die nicht mit dem Inserat zusammenhängen, jegliches Trolling (absichtliche Beleidigung, Unruhestiftung oder direkte Angriffe auf Personen durch abwertende Kommentare) und andere themenfremde Kommunikation, die nicht den Plattformregeln und -richtlinien entspricht;
  • Jeder andere Inhalt, der illegal oder betrügerisch ist.

Plattformrichtlinien

Für unsere Partner

Unsere Beziehung zu unseren Partnern ist uns sehr wichtig. Sie gelten als Partner, wenn Sie Ihre Charter oder geführten Angeltouren bei FishingBooker anbieten. Wir möchten sicherstellen, dass alle Informationen über Sie auf unserer Plattform korrekt sind und dass Ihre gesamte Erfahrung so positiv und reibungslos wie möglich verläuft.

Als Gegenleistung bitten wir Sie, unsere Plattformregeln und Richtlinien zu befolgen. Wir erkennen die harte Arbeit an, die unsere Partner leisten, um sicherzustellen, dass Kunden ein ausgezeichnetes Erlebnis auf dem Wasser haben und dabei lebenslange Erinnerungen sammeln. Wir haben einige allgemeine Erwartungen für Partner festgelegt, um sicherzustellen, dass Kunden diese Erinnerungen noch viele Jahre lang sammeln können.

Allgemeine Erwartungen:

Du solltest:

  • Stellen Sie sich selbst und Ihr Unternehmen/Ihre Dienstleistung wahrheitsgemäß vor;
  • Versuchen Sie Ihr Bestes, Kunden einen Service zu bieten, der Ihre Angebotsdetails genau widerspiegelt oder übertrifft;
  • Respektieren Sie Ihre Kunden und halten Sie an Ausfahrten fest, die über FishingBooker gebucht wurden, auch wenn Sie sich entscheiden, die Plattform zu verlassen, aber bereits FishingBooker-Ausfahrten für zukünftige Termine gebucht haben;
  • Achten Sie darauf, dass Ihr Profil und Ihre Angebote aktuell sind. Dazu gehört, Ihre Kalender auf dem neuesten Stand zu halten, zeitnah mit Kunden zu kommunizieren und effektiv Buchungen anzunehmen, abzulehnen, zu stornieren oder zu ändern.

Du solltest nicht:

  • Verwenden Sie keine Form der Kommunikation, um Kunden dazu zu ermutigen, außerhalb von FishingBooker zu buchen, unabhängig davon, ob der Kunde bereits einen Angelausflug gebucht hat oder beabsichtigt, einen Angelausflug zu buchen.
  • Übertragen Sie Ausflüge, die Sie nicht durchführen können, nicht ohne unsere Zustimmung oder unser Wissen an andere Partner. Wir wissen, dass manchmal Last-Minute-Probleme auftreten (z.B. mechanische Probleme) und es verlockend ist, Ihren Kunden an einen anderen Partner weiterzuleiten, damit er keine Enttäuschung erlebt. Es ist jedoch besser, entweder Ihren Ausflug zu verschieben oder zu bestätigen, dass die Übertragung sowohl für den Partner, den Kunden als auch für FishingBooker in Ordnung ist, bevor Sie fortfahren;
  • Täuschen Sie potenzielle Kunden nicht durch falsche Werbung, wodurch den Kunden ein Service geboten wird, der nicht mit der Beschreibung Ihres Angebots übereinstimmt. Wenn Sie beispielsweise mehrere Boote haben und ein Kunde eine Tour auf einem bestimmten Boot gebucht hat, sollte die Tour nicht auf einem Boot stattfinden, das sich von dem im Angebot beschriebenen/abgebildeten Boot unterscheidet;
  • Verlangen Sie keine überraschenden Zahlungsaufforderungen, die zuvor nicht auf der FishingBooker-Plattform angekündigt oder kommuniziert wurden. Zum Beispiel sollten Sie keine zusätzlichen Anzahlungen zu den über FishingBooker geleisteten verlangen oder Getränke berechnen, wenn in der Anzeige steht, dass Getränke im Reisepreis inbegriffen sind;
  • Inhalte ohne Einwilligung teilen. Private oder vertrauliche Details, Fotos oder Videos von Kunden sollten nicht öffentlich gepostet werden, es sei denn, die betreffende Person hat dem zugestimmt;
  • Kunden sollten weder mit direkten noch mit indirekten Drohungen zu bestimmtem Verhalten gezwungen werden, z.B. um eine bessere Bewertung zu erhalten.

Inhaltserwartungen:

Dein Konto

Sie sollten nur ein Konto für sich selbst und Ihr Unternehmen auf FishingBooker haben. Duplicate Konten sind nicht erlaubt und Sie sollten dasselbe Konto verwenden, auch wenn Sie mehrere Angebote haben.

Ihre Anzeige

Ihr FishingBooker-Inserat ist der erste Eindruck, den Kunden von Ihrem Unternehmen bekommen. Es sollte alle notwendigen Informationen über Ihre Angeltouren und Ihr Geschäft enthalten. Um die Erwartungen der Kunden angemessen zu setzen und zu erfüllen, sollten Sie sicherstellen, dass Ihr Inserat präzise und personalisiert ist, um Ihren Service bestmöglich zu bewerben. Der Einstellungsprozess umfasst die folgenden Kategorien:

Dein persönliches Profil

Dein persönliches Profil sollte genau die Art des Betriebs widerspiegeln, den du führst. Wenn du mit einem Bootsmann oder zusätzlichen Crewmitgliedern zusammenarbeitest, stelle sicher, dass du den entsprechenden Geschäftstyp auswählst und Informationen über alle zusätzlichen Crewmitglieder sowohl in deinem Profil als auch in deiner Angebotsbesschreibung angibst. Auf diese Weise haben Kunden eine gute Vorstellung davon, wer sie zum Angeln begleiten wird.

Ihr(e) Boot(e)

Sie sollten nur eine Anzeige pro Standort haben, es sei denn, Sie haben mehrere Boote, die vom selben Standort abfahren. Zwei Anzeigen mit demselben Standort und Boot zu erstellen, gilt als Duplikat, was nicht erlaubt ist.

Die Angaben zu Ihrem/n Boot(en) sollten wahrheitsgetreu und korrekt sein in Bezug auf Bootslänge, Größe, Kapazität, Zustand und Baujahr/Renovierungsjahr und sollten mit den Angaben in Ihrer Bootsregistrierung übereinstimmen.

Ihre Annehmlichkeiten

Alle von Ihnen angebotenen Annehmlichkeiten sollten in Ihrer Angebotsbesch # tonymtz/kotlin-reddit-clone # src/main/kotlin/com/tonymtz/kotlinredditclone/controllers/v1/UserController.kt package com.tonymtz.kotlinredditclone.controllers.v1 import com.tonymtz.kotlinredditclone.controllers.v1.dto.ApiResponse import com.tonymtz.kotlinredditclone.controllers.v1.dto.RefreshTokenRequest import com.tonymtz.kotlinredditclone.controllers.v1.dto.SignInRequest import com.tonymtz.kotlinredditclone.controllers.v1.dto.SignUpRequest import com.tonymtz.kotlinredditclone.services.AuthorizationService import com.tonymtz.kotlinredditclone.services.MailService import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity import org.springframework.web.bind.annotation.* import java.time.Instant import javax.validation.Valid @RestController @RequestMapping("/api/v1/users") class UserController( private val authorizationService: AuthorizationService, private val mailService: MailService ) { @PostMapping("/signup") fun signUp( @RequestBody @Valid dto: SignUpRequest ): ResponseEntity<*> { val user = authorizationService.signUp(dto) return ResponseEntity( ApiResponse( message = "User Registration Successful", payload = user ), HttpStatus.CREATED ) } @GetMapping("/accountVerification/{token}") fun verifyAccount( @PathVariable token: String ): ResponseEntity<*> { authorizationService.verifyAccount(token) return ResponseEntity( ApiResponse( message = "Account Activated Successfully", payload = null ), HttpStatus.OK ) } @PostMapping("/signin") fun signIn( @RequestBody @Valid dto: SignInRequest ): ResponseEntity<*> { val token = authorizationService.signIn(dto) return ResponseEntity( ApiResponse( message = "Successfully signed in", payload = token ), HttpStatus.OK ) } @PostMapping("/refreshToken") fun refreshToken( @RequestBody @Valid dto: RefreshTokenRequest ): ResponseEntity<*> { val token = authorizationService.refreshToken(dto) return ResponseEntity( ApiResponse( message = "Token refreshed", payload = token ), HttpStatus.OK ) } @PostMapping("/logout") fun signOut( @RequestBody @Valid dto: RefreshTokenRequest ): ResponseEntity<*> { val hasExpired = authorizationService.logOut(dto.refreshToken) return ResponseEntity( ApiResponse( message = "Refresh Token Deleted Successfully", payload = mapOf( "refreshToken" to dto.refreshToken, "hasExpired" to hasExpired, "when" to Instant.now() ) ), HttpStatus.OK ) } } End File# tonymtz/kotlin-reddit-clone package com.tonymtz.kotlinredditclone.services.impls import com.tonymtz.kotlinredditclone.controllers.v1.dto.RefreshTokenRequest import com.tonymtz.kotlinredditclone.controllers.v1.dto.SignInRequest import com.tonymtz.kotlinredditclone.controllers.v1.dto.SignUpRequest import com.tonymtz.kotlinredditclone.controllers.v1.dto.TokenResponse import com.tonymtz.kotlinredditclone.exceptions.SpringRedditException import com.tonymtz.kotlinredditclone.models.ActivationToken import com.tonymtz.kotlinredditclone.models.RefreshToken import com.tonymtz.kotlinredditclone.models.User import com.tonymtz.kotlinredditclone.repositories.ActivationTokenRepository import com.tonymtz.kotlinredditclone.repositories.RefreshTokenRepository import com.tonymtz.kotlinredditclone.repositories.UserRepository import com.tonymtz.kotlinredditclone.services.AuthorizationService import com.tonymtz.kotlinredditclone.services.JWTService import com.tonymtz.kotlinredditclone.services.MailService import com.tonymtz.kotlinredditclone.services.RefreshTokenService import org.springframework.security.authentication.AuthenticationManager import org.springframework.security.authentication.UsernamePasswordAuthenticationToken import org.springframework.security.crypto.password.PasswordEncoder import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.time.Instant import java.util.* @Service class AuthorizationServiceImpl( private val userRepository: UserRepository, private val activationTokenRepository: ActivationTokenRepository, private val passwordEncoder: PasswordEncoder, private val mailService: MailService, private val authenticationManager: AuthenticationManager, private val jwtService: JWTService, private val refreshTokenService: RefreshTokenService ): AuthorizationService { @Transactional override fun signUp(dto: SignUpRequest): User { val user = User( username = dto.username, password = passwordEncoder.encode(dto.password), email = dto.email, createdDate = Instant.now(), isEnabled = false, ) userRepository.save(user) val token = generateActivationToken(user) mailService.sendActivationMail(dto.email, token) return user } @Transactional(readOnly = true) override fun verifyAccount(token: String) { val activationToken = activationTokenRepository.findByToken(token).orElseThrow { SpringRedditException("Invalid Token") } fetchUserAndEnable(activationToken) } override fun signIn(dto: SignInRequest): TokenResponse { val authenticate = authenticationManager.authenticate( UsernamePasswordAuthenticationToken(dto.username, dto.password) ) val token = jwtService.generateToken(dto.username) val refreshToken = refreshTokenService.generateRefreshToken() return TokenResponse( authenticationToken = token, expiresAt = Instant.now().plusMillis(jwtService.getJwtExpirationInMillis()), refreshToken = refreshToken.token, username = dto.username ) } override fun refreshToken(dto: RefreshTokenRequest): TokenResponse { refreshTokenService.validateRefreshToken(dto.refreshToken) val token = jwtService.generateToken(dto.username) return TokenResponse( authenticationToken = token, refreshToken = dto.refreshToken, expiresAt = Instant.now().plusMillis(jwtService.getJwtExpirationInMillis()), username = dto.username, ) } override fun logOut(refreshToken: String): Boolean { return refreshTokenService.deleteRefreshToken(refreshToken) } @Transactional private fun fetchUserAndEnable(activationToken: ActivationToken) { val username = activationToken.user.username val user = userRepository.findByUsername(username).orElseThrow { SpringRedditException("User not found with username - $username") } user.isEnabled = true userRepository.save(user) } private fun generateActivationToken(user: User): String { val token = UUID.randomUUID().toString() val activationToken = ActivationToken( token = token, user = user, expiryDate = Instant.now().plusMillis(mailService.getTokenExpiryMs()), ) activationTokenRepository.save(activationToken) return token } }End File# tonymtz/kotlin-reddit-clone package com.tonymtz.kotlinredditclone.services.impls import com.tonymtz.kotlinredditclone.controllers.v1.dto.SubredditDto import com.tonymtz.kotlinredditclone.exceptions.SpringRedditException import com.tonymtz.kotlinredditclone.mappers.SubredditMapper import com.tonymtz.kotlinredditclone.models.Subreddit import com.tonymtz.kotlinredditclone.repositories.SubredditRepository import com.tonymtz.kotlinredditclone.services.AuthorizationService import com.tonymtz.kotlinredditclone.services.SubredditService import com.tonymtz.kotlinredditclone.services.UserService import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.time.Instant import java.util.stream.Collectors @Service class SubredditServiceImpl( private val subredditRepository: SubredditRepository, private val subredditMapper: SubredditMapper, private val userService: UserService ): SubredditService { @Transactional override fun save(dto: SubredditDto): SubredditDto { val subreddit = subredditRepository.save( subredditMapper.mapDtoToSubreddit(dto).copy( user = userService.getCurrentUser() ) ) return SubredditDto.from(subreddit) } @Transactional(readOnly = true) override fun getAll(): List { return subredditRepository.findAll() .stream() .map(SubredditDto::from) .collect(Collectors.toList()) } @Transactional(readOnly = true) override fun getSubreddit(id: Long): SubredditDto { val subreddit = subredditRepository.findById(id) .orElseThrow { SpringRedditException("No subreddit found with ID - $id") } return SubredditDto.from(subreddit) } } # api/index.js const express = require("express"); const mongoose = require("mongoose"); const dotenv = require("dotenv"); const passport = require("passport"); const cors = require("cors"); const cookieParser = require("cookie-parser"); const { Strategy: LocalStrategy } = require("passport-local"); const { Strategy: JwtStrategy, ExtractJwt } = require("passport-jwt"); const bcrypt = require("bcryptjs"); const jwt = require("jsonwebtoken"); const multer = require("multer"); const { CloudinaryStorage } = require("multer-storage-cloudinary"); const cloudinary = require("cloudinary").v2; const Room = require("./models/Room"); const Reservation = require("./models/Reservation"); const User = require("./models/User"); const Consultation = require("./models/Consultation"); dotenv.config(); mongoose.connect(process.env.MONGO_URL).then(() => { console.log("Connected to MongoDB"); }); // Configure cloudinary cloudinary.config({ cloud_name: process.env.CLOUDINARY_CLOUD_NAME, api_key: process.env.CLOUDINARY_API_KEY, api_secret: process.env.CLOUDINARY_API_SECRET, }); // Configure storage for multer and cloudinary const storage = new CloudinaryStorage({ cloudinary, params: { folder: "hotelmanagement/rooms", allowed_formats: ["jpg", "jpeg", "png"], }, }); const upload = multer({ storage }); const app = express(); // Configure CORS to allow the frontend to access the API const corsOptions = { origin: process.env.FRONTEND_URL, credentials: true, }; app.use(cors(corsOptions)); app.use(express.json()); app.use(cookieParser()); // Passport local strategy for login passport.use( new LocalStrategy( { usernameField: "email", passwordField: "password", }, async (email, password, done) => { try { const user = await User.findOne({ email }); if (!user) { return done(null, false, { message: "User not found" }); } const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return done(null, false, { message: "Incorrect password" }); } return done(null, user); } catch (err) { return done(err); } } ) ); // JWT strategy for authentication passport.use( new JwtStrategy( { jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), secretOrKey: process.env.JWT_SECRET, }, async (jwtPayload, done) => { try { const user = await User.findById(jwtPayload.id); if (user) { return done(null, user); } return done(null, false); } catch (err) { return done(err, false); } } ) ); app.use(passport.initialize()); // Register route app.post("/api/register", async (req, res) => { try { const { name, email, password, role } = req.body; // Check if user already exists const existingUser = await User.findOne({ email }); if (existingUser) { return res.status(400).json({ message: "User already exists" }); } // Hash password const salt = await bcrypt.genSalt(10); const hashedPassword = await bcrypt.hash(password, salt); // Create new user const newUser = new User({ name, email, password: hashedPassword, role: role || "customer", // Default to customer if no role specified }); await newUser.save(); res.status(201).json({ message: "User registered successfully" }); } catch (err) { console.error("Registration error:", err); res.status(500).json({ message: "Server error during registration" }); } }); // Login route app.post("/api/login", (req, res, next) => { passport.authenticate("local", { session: false }, (err, user, info) => { if (err) { return next(err); } if (!user) { return res.status(401).json({ message: info.message }); } const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: "7d", }); return res.status(200).json({ token, user: { id: user._id, name: user.name, email: user.email, role: user.role, }, }); })(req, res, next); }); // Middleware to check if user is authenticated const authenticateJWT = passport.authenticate("jwt", { session: false }); // Middleware to check if user is an admin const isAdmin = (req, res, next) => { if (req.user && req.user.role === "admin") { return next(); } return res.status(403).json({ message: "Access denied: Admin only" }); }; // Middleware to check if user is a manager const isManager = (req, res, next) => { if (req.user && (req.user.role === "manager" || req.user.role === "admin")) { return next(); } return res.status(403).json({ message: "Access denied: Manager only" }); }; // Get authenticated user info app.get("/api/me", authenticateJWT, (req, res) => { res.json({ id: req.user._id, name: req.user.name, email: req.user.email, role: req.user.role, }); }); // Create a new room (Admin/Manager only) app.post( "/api/rooms", authenticateJWT, isManager, upload.array("images", 5), async (req, res) => { try { const { roomNumber, type, capacity, price, description, amenities, status, } = req.body; // Get uploaded image URLs from Cloudinary const images = req.files ? req.files.map((file) => file.path) : []; // Parse amenities if it's sent as a string const parsedAmenities = Array.isArray(amenities) ? amenities : amenities ? JSON.parse(amenities) : []; const newRoom = new Room({ roomNumber, type, capacity: parseInt(capacity), price: parseFloat(price), description, amenities: parsedAmenities, images, status: status || "available", }); await newRoom.save(); res.status(201).json(newRoom); } catch (err) { console.error("Error creating room:", err); res.status(500).json({ message: "Error creating room", error: err }); } } ); // Get all rooms app.get("/api/rooms", async (req, res) => { try { const rooms = await Room.find(); res.json(rooms); } catch (err) { res.status(500).json({ message: "Error fetching rooms", error: err }); } }); // Get a specific room app.get("/api/rooms/:id", async (req, res) => { try { const room = await Room.findById(req.params.id); if (!room) { return res.status(404).json({ message: "Room not found" }); } res.json(room); } catch (err) { res.status(500).json({ message: "Error fetching room", error: err }); } }); // Update a room (Admin/Manager only) app.put( "/api/rooms/:id", authenticateJWT, isManager, upload.array("images", 5), async (req, res) => { try { const { roomNumber, type, capacity, price, description, amenities, status, existingImages, } = req.body; // Get uploaded image URLs from Cloudinary const newImages = req.files ? req.files.map((file) => file.path) : []; // Combine with existing images if they were sent const images = existingImages ? typeof existingImages === "string" ? JSON.parse(existingImages).concat(newImages) : existingImages.concat(newImages) : newImages; // Parse amenities if it's sent as a string const parsedAmenities = Array.isArray(amenities) ? amenities : amenities ? JSON.parse(amenities) : []; const updatedRoom = await Room.findByIdAndUpdate( req.params.id, { roomNumber, type, capacity: parseInt(capacity), price: parseFloat(price), description, amenities: parsedAmenities, images, status: status || "available", }, { new: true } ); if (!updatedRoom) { return res.status(404).json({ message: "Room not found" }); } res.json(updatedRoom); } catch (err) { console.error("Error updating room:", err); res.status(500).json({ message: "Error updating room", error: err }); } } ); // Delete a room (Admin/Manager only) app.delete( "/api/rooms/:id", authenticateJWT, isManager, async (req, res) => { try { const room = await Room.findByIdAndDelete(req.params.id); if (!room) { return res.status(404).json({ message: "Room not found" }); } res.json({ message: "Room deleted successfully" }); } catch (err) { res.status(500).json({ message: "Error deleting room", error: err }); } } ); // Create a reservation (Authenticated users) app.post("/api/reservations", authenticateJWT, async (req, res) => { try { const { roomId, checkInDate, checkOutDate, guests, specialRequests } = req.body; // Convert string dates to Date objects const checkIn = new Date(checkInDate); const checkOut = new Date(checkOutDate); // Validate dates if (checkIn >= checkOut) { return res .status(400) .json({ message: "Check-out date must be after check-in date" }); } if (checkIn < new Date()) { return res .status(400) .json({ message: "Check-in date must be in the future" }); } // Check room availability const room = await Room.findById(roomId); if (!room) { return res.status(404).json({ message: "Room not found" }); } if (room.status !== "available") { return res.status(400).json({ message: "Room is not available" }); } // Check if room is already booked for the requested dates const conflictingReservation = await Reservation.findOne({ room: roomId, status: { $in: ["confirmed", "checked-in"] }, $or: [ { checkInDate: { $lt: checkOut }, checkOutDate: { $gt: checkIn }, }, ], }); if (conflictingReservation) { return res .status(400) .json({ message: "Room is already booked for the selected dates" }); } // Calculate total price (assuming price per night) const nights = Math.ceil( (checkOut.getTime() - checkIn.getTime()) / (1000 * 3600 * 24) ); const totalPrice = room.price * nights; const newReservation = new Reservation({ user: req.user._id, room: roomId, checkInDate, checkOutDate, guests, totalPrice, specialRequests, status: "confirmed", }); await newReservation.save(); res.status(201).json(newReservation); } catch (err) { console.error("Error creating reservation:", err); res .status(500) .json({ message: "Error creating reservation", error: err.toString() }); } }); // Get all reservations (Admin/Manager can see all, users see only their own) app.get("/api/reservations", authenticateJWT, async (req, res) => { try { let reservations; if (req.user.role === "admin" || req.user.role === "manager") { // Admin/Manager can see all reservations reservations = await Reservation.find() .populate("user", "name email") .populate("room"); } else { // Regular users can only see their own reservations reservations = await Reservation.find({ user: req.user._id }) .populate("user", "name email") .populate("room"); } res.json(reservations); } catch (err) { res .status(500) .json({ message: "Error fetching reservations", error: err }); } }); // Get a specific reservation (Admin/Manager can access any, users only their own) app.get("/api/reservations/:id", authenticateJWT, async (req, res) => { try { const reservation = await Reservation.findById(req.params.id) .populate("user", "name email") .populate("room"); if (!reservation) { return res.status(404).json({ message: "Reservation not found" }); } // Check if user has permission to view this reservation if ( req.user.role !== "admin" && req.user.role !== "manager" && reservation.user._id.toString() !== req.user._id.toString() ) { return res .status(403) .json({ message: "You don't have permission to view this reservation" }); } res.json(reservation); } catch (err) { res .status(500) .json({ message: "Error fetching reservation", error: err }); } }); // Update a reservation (Admin/Manager can update any, users only their own) app.put("/api/reservations/:id", authenticateJWT, async (req, res) => { try { const reservation = await Reservation.findById(req.params.id); if (!reservation) { return res.status(404).json({ message: "Reservation not found" }); } // Check if user has permission to update this reservation if ( req.user.role !== "admin" && req.user.role !== "manager" && reservation.user.toString() !== req.user._id.toString() ) { return res .status(403) .json({ message: "You don't have permission to update this reservation", }); } // Only allow updating specific fields const { checkInDate, checkOutDate, guests, specialRequests, status } = req.body; const updateData = {}; if (checkInDate) updateData.checkInDate = checkInDate; if (checkOutDate) updateData.checkOutDate = checkOutDate; if (guests) updateData.guests = guests; if (specialRequests) updateData.specialRequests = specialRequests; // Only admins/managers can update status if ( status && (req.user.role === "admin" || req.user.role === "manager") ) { updateData.status = status; } // If dates are being updated, recalculate total price if (checkInDate || checkOutDate) { const room = await Room.findById(reservation.room); const checkIn = new Date(checkInDate || reservation.checkInDate); const checkOut = new Date(checkOutDate || reservation.checkOutDate); const nights = Math.ceil( (checkOut.getTime() - checkIn.getTime()) / (1000 * 3600 * 24) ); updateData.totalPrice = room.price * nights; } const updatedReservation = await Reservation.findByIdAndUpdate( req.params.id, updateData, { new: true } ) .populate("user", "name email") .populate("room"); res.json(updatedReservation); } catch (err) { res .status(500) .json({ message: "Error updating reservation", error: err }); } }); // Cancel a reservation (Admin/Manager can cancel any, users only their own) app.put("/api/reservations/:id/cancel", authenticateJWT, async (req, res) => { try { const reservation = await Reservation.findById(req.params.id); if (!reservation) { return res.status(404).json({ message: "Reservation not found" }); } // Check if user has permission to cancel this reservation if ( req.user.role !== "admin" && req.user.role !== "manager" && reservation.user.toString() !== req.user._id.toString() ) { return res .status(403) .json({ message: "You don't have permission to cancel this reservation", }); } // Don't allow cancelling if already checked in or completed if (["checked-in", "completed"].includes(reservation.status)) { return res .status(400) .json({ message: "Cannot cancel a reservation that is checked-in or completed", }); } const updatedReservation = await Reservation.findByIdAndUpdate( req.params.id, { status: "cancelled" }, { new: true } ) .populate("user", "name email") .populate("room"); res.json(updatedReservation); } catch (err) { res .status(500) .json({ message: "Error cancelling reservation", error: err }); } }); // Get available rooms for a specific date range app.get("/api/rooms/available", async (req, res) => { try { const { checkInDate, checkOutDate, guests } = req.query; if (!checkInDate || !checkOutDate) { return res .status(400) .json({ message: "Check-in and check-out dates are required" }); } // Convert string dates to Date objects const checkIn = new Date(checkInDate); const checkOut = new Date(checkOutDate); // Find reservations that overlap with the requested date range const reservations = await Reservation.find({ status: { $in: ["confirmed", "checked-in"] }, checkInDate: { $lt: checkOut }, checkOutDate: { $gt: checkIn }, }).select("room"); // Get the IDs of rooms that are already booked const bookedRoomIds = reservations.map((r) => r.room.toString()); // Find rooms that are available and match capacity if specified const query = { status: "available", _id: { $nin: bookedRoomIds }, }; if (guests) { query.capacity = { $gte: parseInt(guests) }; } const availableRooms = await Room.find(query); res.json(availableRooms); } catch (err) { res .status(500) .json({ message: "Error finding available rooms", error: err }); } }); // Route to create a consultation request app.post("/api/consultations", authenticateJWT, async (req, res) => { try { const { subject, message, preferredContactTime, contactMethod } = req.body; const newConsultation = new Consultation({ user: req.user._id, subject, message, preferredContactTime: preferredContactTime ? new Date(preferredContactTime) : undefined, contactMethod, }); await newConsultation.save(); res.status(201).json(newConsultation); } catch (err) { console.error("Error creating consultation:", err); res .status(500) .json({ message: "Error creating consultation", error: err.toString() }); } }); // Get all consultations (Admin/Manager can see all, users see only their own) app.get("/api/consultations", authenticateJWT, async (req, res) => { try { let consultations; if (req.user.role === "admin" || req.user.role === "manager") { // Admin/Manager can see all consultations consultations = await Consultation.find().populate( "user", "name email" ); } else { // Regular users can only see their own consultations consultations = await Consultation.find({ user: req.user._id }).populate( "user", "name email" ); } res.json(consultations); } catch (err) { res .status(500) .json({ message: "Error fetching consultations", error: err }); } }); // Update a consultation (Admin/Manager only) app.put( "/api/consultations/:id", authenticateJWT, is

Es liegt in Ihrer Verantwortung sicherzustellen, dass die in Ihrer Anzeige erwähnten Annehmlichkeiten zum Zeitpunkt des Ausflugs verfügbar und funktionsfähig sind, wie zum Beispiel Toiletten, Klimaanlage, Fischfinder, Schwimmwesten für Kinder, Kampfstühle usw.

Deine Angeltouren

Achten Sie darauf, alle Zielfischarten und verfügbaren Angeltechniken aufzulisten, damit Kunden wissen, was Ihre Ausflüge beinhalten und vor der Buchung fundierte Entscheidungen treffen können.

Stellen Sie sicher, dass die angekündigten Angelpreise auf Ihrer persönlichen oder Firmenwebsite mit den Preisen auf FishingBooker übereinstimmen und umgekehrt.

Deine Fotos

Alle Fotos müssen den Inhaltsrichtlinien von FishingBooker entsprechen. Erwägen Sie, aktuelle Fotos Ihrer letzten Fänge hinzuzufügen, um die Erwartungen der Kunden zu erfüllen, und aktualisieren Sie Ihre Fotos regelmäßig. Sie können auch unserem Content-Team die Berechtigung erteilen, Fotos für Sie hinzuzufügen. Ihre Fotos sollten keine Details wie Ihre persönliche/geschäftliche Website oder externe Telefonnummern enthalten. Wenn Sie Fotos hochladen, die diese Informationen in Ihrem Inserat enthalten, behalten wir uns das Recht vor, die Fotos zu bearbeiten, um sichtbare Kontaktinformationen zu entfernen.

Deine Videos

Die Fotos und Videos in Ihrer Anzeige sind der erste Eindruck, den Ihre Kunden von Ihnen bekommen werden. Um sicherzustellen, dass sie einen großartigen ersten Eindruck erhalten, empfehlen wir:

  • Stellen Sie sicher, dass die Sonne hinter Ihrem Rücken ist, wenn Sie filmen. Hartes, direktes Licht wirft dunkle Schatten auf Ihr Motiv, verdeckt Details und verwässert Farben. Wenn die Sonne hingegen hinter Ihnen steht, können Sie alle unglaublichen Details Ihres Fangs und die lächelnden Gesichter Ihrer Kunden sehen.
  • Sorgen Sie dafür, dass Ihr Objektiv sauber ist. Ein verschmutztes Objektiv führt zu einem unscharfen Foto. Kunden buchen doppelt so häufig bei Ihnen, wenn Sie auf Ihrer Anzeige großartiges Videomaterial haben.
  • Die Zeit gut wählen. Stellen Sie sicher, dass Sie filmen, wenn die Aktion stattfindet, und hören Sie nicht zu früh auf. Kunden möchten den Fisch, den Sie gedrillt haben, genau sehen können.

Jedes Video, das auf FishingBooker hochgeladen wird, muss bestimmte Spezifikationen erfüllen. Dein Video sollte:

  • Sei mindestens 30 Sekunden lang
  • Nicht größer als 1 Gigabyte sein
  • Haben Sie eine Auflösung von mindestens 720 x 720 Pixeln

Ihre Bewertungen

Wenn Sie neu auf unserer Plattform sind, empfehlen wir Ihnen, Bewertungen von früheren Kunden anzufordern, die Ihren Service außerhalb der FishingBooker-Plattform genutzt haben, um zunächst Ihre Online-Reputation aufzubauen. Diese Bewertungen werden nicht als verifiziert gekennzeichnet, was sich nur auf Bewertungen bezieht, die von FishingBooker-Kunden eingereicht wurden.

Du solltest keine ungeprüften Bewertungseinladungen an Freunde oder Familienmitglieder senden, die entweder privat mit dir geangelt haben, d.h. nicht über eine Buchung oder Bezahlung einer Tour, oder die noch nie mit dir geangelt haben.

Sie dürfen keine falschen Reservierungen im Austausch für positive Bewertungen annehmen, z. B. sollten Sie keine Buchung von einem Freund akzeptieren mit der Absicht, die Tour nicht durchzuführen, nur damit dieser eine verifizierte Bewertung hinterlassen kann.

Wenn Sie eine Bewertung erhalten, mit der Sie nicht zufrieden sind, sollten Sie die Gelegenheit nutzen, auf die Bewertung zu antworten und die Situation aus Ihrer Perspektive zu erklären. Auf diese Weise können zukünftige Kunden Ihren Standpunkt sehen.

Ihre Berichte

Die Fangberichte helfen Ihnen, Ihre Bekanntheit zu steigern, Ihren Online-Ruf zu verbessern und den Lesern mitzuteilen, was gerade beißt, was dazu beiträgt, realistische Kundenerwartungen zu setzen. Alle in Ihrem Bericht enthaltenen Informationen, wie zum Beispiel welche Fische beißen und wann die beste Zeit zum Angeln ist, sollten Ihre Erfahrungen wahrheitsgetreu widerspiegeln.

Richtlinien für die Kommunikation mit Kunden

Du solltest mit deinen Kunden über die FishingBooker-Plattform kommunizieren. Dies gewährleistet Privatsphäre und Sicherheit sowohl für dich als auch für deine potenziellen Kunden und liefert uns zudem einen Nachweis aller Kommunikation im Falle von Stornierungen oder strittigen Vorfällen nach einer durchgeführten Tour.

Allgemeine Erwartungen

Partner sollten respektvoll mit Kunden kommunizieren, schnell auf ihre Anfragen reagieren und informative Antworten bezüglich der Kundenanfrage geben.

Bitte kommunizieren Sie nicht mit Kunden außerhalb von FishingBooker, sobald eine Buchung bestätigt wurde, um Kontaktdaten zum persönlichen Vorteil auszutauschen, z.B. um die Tour privat umzubuchen und die Zahlung der Provision zu umgehen. Die Provision, die wir von jeder Buchung erhalten, ermöglicht es uns, Partner und Kunden zu unterstützen und Ihnen zu helfen, durch kostenloses Marketing, das für uns nicht kostenlos ist, ein breiteres Publikum von Kunden zu erreichen!

Wir überwachen die Kommunikation auf unserer Plattform zu Sicherheits-, Betrugspräventions- und Plattformmissbrauchszwecken. Wir prüfen markierte Unterhaltungen und bewerten, ob es Anzeichen für Versuche gibt, Kunden von der Plattform wegzuleiten, einschließlich der Weitergabe von Kontaktdaten, der Vereinbarung direkter Zahlungen oder anderweitiger Umgehung des Buchungsprozesses von FishingBooker. Fälle werden anhand der Häufigkeit, Absicht und Schwere des Verhaltens sowie anhand dessen bewertet, ob es ein wiederholtes Muster oder eine frühere Vorgeschichte ähnlichen Verhaltens gibt.

Sobald das System eine Nachricht erkennt, die gegen unsere Richtlinien verstößt, werden Sie umgehend benachrichtigt.

Je nach den Umständen können die Maßnahmen von einer ersten Verwarnung und Aufklärung über Anfrage- und Buchungsbeschränkungen oder vorübergehende Einschränkungen bis hin zur Entfernung von der Plattform in schwerwiegenderen oder wiederholten Fällen reichen. Das Ziel ist es, die Integrität des Marktplatzes zu schützen und gleichzeitig faire und professionelle Beziehungen zu Partnern aufrechtzuerhalten.

Beachten Sie, dass diese Konsequenzen auch den Zugang zu anderen Funktionen beeinträchtigen können, wie z.B. FishingBooker Direct, das die Aufrechterhaltung eines aktiven FishingBooker-Kontos erfordert.

Zusätzlich sollten Sie keine privaten Informationen wie Ihre Zahlungsdetails außerhalb der Instant-Messaging-Plattform von FishingBooker mitteilen. Wir können keine Sicherheit garantieren, wenn Sie diese Informationen extern weitergeben.

Vor der Buchungsbestätigung

Wenn du einen Kunden kontaktieren möchtest, bevor du seine Buchung bestätigst, solltest du über Instant Messaging mit ihm kommunizieren. Alle externen Details werden anonymisiert. Nachrichten, die E-Mail-Adressen, Telefonnummern (ausgeschrieben oder als Ziffern), Standorte oder physische Adressen enthalten, werden von unserem System abgelehnt, bevor du die Buchung akzeptierst.

Nach Buchungsbestätigung

Sobald Sie eine Buchung bestätigen, können Sie den Kunden über Sofortnachrichten oder direkt per Telefon oder E-Mail kontaktieren.

Um Ihre Privatsphäre zu schützen, kann unser System Ihnen eine anonymisierte Nummer zuweisen, sobald Sie eine Buchung mit einem Kunden bestätigen. Diese Nummer bleibt aktiv, bis die Buchung stattgefunden hat, und ermöglicht es Ihnen, den Kunden direkt zu kontaktieren. Lesen Sie mehr darüber, warum wir Telefonnummern anonymisieren

Empfohlene Verhaltensweisen und professionelles Auftreten

Bei FishingBooker ist es unser Anliegen, mit Partnern zusammenzuarbeiten, die bestimmte Werte und Eigenschaften besitzen, die dazu beitragen, positive Erlebnisse für Kunden zu schaffen. Um diese hohen Standards aufrechtzuerhalten, bitten wir Sie, diese erwarteten Verhaltensweisen bei der Zusammenarbeit mit uns zu befolgen.

Du solltest:

  • Sei pünktlich, zuverlässig, gut vorbereitet und organisiert. Kommuniziere die Abfahrtszeiten der Ausfahrt zuverlässig, sowie den Abholort oder Treffpunkt;
  • Halten Sie die relevanten gesetzlichen Anforderungen bei der Führung Ihres Unternehmens ein, wie beispielsweise den Besitz der notwendigen Lizenzen/Akkreditierungen und die Pflege und korrekte Bewerbung Ihrer Lizenzen und Zertifikate ohne Übertreibung;
  • Bewerben Sie Angeltouren so, dass die richtigen Erwartungen bei Ihren Kunden geweckt werden.

Du solltest nicht:

  • an schwerwiegenden und/oder ungelösten Strafverfahren, beruflichen Beschwerden/Ansprüchen, Zivilklagen oder finanziellen Forderungen beteiligt sein, einschließlich Vorschlägen an Gläubiger oder Unterhaltsrückständen;
  • an jeglicher Art von missbräuchlichem Verhalten teilnehmen;
  • an illegalen Substanzen teilnehmen.

Verhaltensweisen, die nicht mit den Richtlinien und Nutzungsbedingungen von FishingBooker übereinstimmen, können zu Folgendem führen:

  • Deaktivierung Ihres Kontos
  • Ihre Anzeige pausieren, um keine Buchungen zu erhalten
  • Deine Rangbewertung wurde vorübergehend herabgestuft
  • Entfernung jeglicher Inhalte mit beleidigender oder diskriminierender Sprache, irreführenden oder falschen Informationen oder anderen Informationen, die nicht mit den Inhaltsbedingungen von FishingBooker übereinstimmen

Für unsere Kunden

Bei FishingBooker ist es eines unserer Hauptziele, sicherzustellen, dass Sie ein fantastisches Erlebnis bei Ihrer ausgewählten Tour haben und dabei positive Erinnerungen fürs Leben schaffen.

Als Gegenleistung bitten wir Sie, die Kapitäne mit Respekt zu behandeln, indem Sie unsere Plattformregeln und -richtlinien befolgen. Wir haben einige Erwartungen formuliert, die wir alle unsere Kunden bitten zu beachten und einzuhalten. So können Sie auch in den kommenden Jahren weiterhin Angeltouren buchen und schöne Erinnerungen auf dem Wasser sammeln!

Kundenerwartungen

Allgemein

Sie sollen Informationen über sich und Ihre Gruppe wahrheitsgemäß angeben. Wenn Sie dies nicht tun, dürfen die Partner die Dienstleistung verweigern.

Vor der Angelfahrt

Du solltest:

  • Überprüfen Sie die Buchungsrichtlinien Ihres gewählten Charteranbieters. Diese finden Sie auf der Angebotsseite Ihres ausgewählten Charters oder in Ihrer Buchungsbestätigungs-E-Mail;
  • Mache dich mit der Beschreibung deines bevorzugten Angebots vertraut, vor allem mit Details wie den verfügbaren Annehmlichkeiten, den Besonderheiten der Tour, den Zielfischarten und dem Charteranbieter;
  • Lesen Sie vorherige Bewertungen über den Bootsverleih im Voraus, um sich mit deren Service vertraut zu machen;
  • Besprechen Sie alle wichtigen Details der Tour und offene Fragen mit dem Charter-Anbieter über unseren Instant-Messaging-Dienst. Weitere Informationen zur Kontaktaufnahme finden Sie hier;
  • Tragen Sie angemessene Kleidung, bringen Sie Sonnenschutz, eine zusätzliche Wasserflasche, Kopfbedeckung und geeignetes Schuhwerk mit.

Du kannst mehr Informationen darüber, wie du dich auf deinen Angelausflug vorbereiten kannst, hier nachlesen.

Während der Tour

Wenn Sie auf dem Wasser unterwegs sind, ist es wichtig zu beachten, dass Ihr Charterkapitän das Sagen hat. Achten Sie darauf, auf seinen Rat zu hören und die Regeln zu befolgen, die er vor und während der Tour festlegt.
Zusätzlich sollten Sie:

  • Bitte beachten Sie, dass das Gesamterlebnis der Tour stark von den Wetter- und Angelbedingungen abhängt, und dass aufgrund dessen einige Abweichungen von der Beschreibung des Angebots möglich sind;
  • Verhalten Sie sich so, dass die Sicherheit anderer Passagiere in keiner Weise gefährdet wird;
  • Informieren Sie den Charteranbieter immer, wenn Sie bestimmte Beschwerden haben, die die Reise beeinträchtigen könnten, wie zum Beispiel frühere oder bestehende körperliche Verletzungen;
  • Seien Sie ehrlich bezüglich Ihrer bisherigen Angelerfahrung und Ihres Niveaus der Angelfähigkeiten. Dies hilft dem Charteranbieter, das Erlebnis auf Ihre Bedürfnisse abzustimmen;
  • Beachten Sie, dass Angeln Risiken beinhaltet, die nicht von der Erfahrung selbst getrennt werden können (z.B. Ausrutschen auf dem Deck, versehentlich jemanden mit der Rute treffen, usw.).
  • Nicht unter dem Einfluss illegaler Substanzen stehen oder vor oder während der Tour betrunken sein.

"Nach der Tour"

Du solltest:

  • Zahlen Sie für den Trip direkt vor dem Ablegen vom Steg oder am Ende des Trips, je nach Wahl des Ausflugsanbieters, falls die Zahlung nicht bereits vor dem Trip erfolgt ist. Trinkgeld für den Ausflugsanbieter und/oder die Bootshelfer wird erwartet, da Trinkgelder nicht im Preis des über FishingBooker gebuchten Trips enthalten sind.
  • Verfassen Sie eine ehrliche und informative Bewertung über Ihre Erfahrung während der Tour. Selbst wenn die Tour Ihre Erwartungen nicht vollständig erfüllt hat, ist es wertvoll, dies in Ihrer Bewertung anzumerken, damit die Charteranbieter wissen, wie sie ihren Service verbessern können;
  • Informieren Sie unser Support-Team, falls die Tour nicht der Beschreibung der von Ihnen gebuchten Tour entsprochen hat.

Folgendes wird nicht geduldet:

  • Rückbuchungen aufgrund von Friendly Fraud: Kunden dürfen nicht versuchen, falsche Reklamationen/Rückbuchungsansprüche zu missbrauchen oder geltend zu machen, um eine Rückerstattung zu erhalten;
  • Jede Art von Erpressung. Sie sollten keine direkten oder indirekten Drohungen verwenden, wie z.B. das Androhen einer negativen Bewertung, um ein beabsichtigtes Ergebnis zu erzwingen, z.B. eine Rückerstattung von Ihrem Charteranbieter oder FishingBooker;
  • Kommunikation außerhalb von FishingBooker, um Ausflüge zu stornieren und direkt mit dem Charteranbieter einen besseren Preis auszuhandeln;
  • Respektlosigkeit gegenüber anderen Nutzern und FishingBooker-Mitarbeitern.
  • Missbrauch der Stornierungsbedingungen des Anbieters.

Die oben genannten Verhaltensweisen können zur Stornierung Ihrer Buchung, zur Entfernung von FishingBooker und zur Deaktivierung Ihres Kontos führen.

Wie Bewertungen funktionieren

Unsere Richtlinien

Ihnen die Möglichkeit zu geben, ehrlich über Ihre Erfahrungen mit FishingBooker und Ihrem gewählten Charteranbieter zu berichten, ist ein wichtiger Teil des Betriebs einer zuverlässigen und erfolgreichen Plattform für Angelausflüge. Wir erwarten, dass Bewertungen auf FishingBooker hilfreich, informativ, vertrauenswürdig und wahrheitsgemäß sind und keine falschen oder schädlichen Informationen enthalten. Wir bitten Sie, nur ehrliche und informative Bewertungen über Ihre Erfahrungen während Ihres Ausflugs abzugeben.

Du kannst nur eine Bewertung pro Angelausflug hinterlassen, und der Ausflugsanbieter kann nur einmal auf deine Bewertung antworten. Alle Bewertungen, die du abgibst, müssen die folgenden Richtlinien erfüllen:

  1. Sie dürfen keine falschen Informationen enthalten und dürfen nicht für Erpressungszwecke verwendet werden, um ein gewünschtes Ergebnis zu manipulieren, z.B. um eine Entschädigung zu erhalten.
  2. Sie sollten detaillierte Informationen über Ihre Erfahrungen während Ihres Ausflugs enthalten, damit zukünftige Kunden mehr über den Charteranbieter und sein Unternehmen erfahren können.
  3. Sie sollten relevant sein und das Charterlebnis beschreiben, anstatt andere Themen, die nicht mit dem Angelausflug verbunden sind.
  4. Sie müssen den Richtlinien und Nutzungsbedingungen von FishingBooker entsprechen.

Um sicherzustellen, dass Ihre Bewertungen für andere Kunden nützlich sind, sollten Sie Folgendes vermeiden:

  • Inhalte, die sich auf Umstände beziehen, die vollständig außerhalb der Kontrolle Ihres Charteranbieters liegen;
  • Kommentare über die sozialen, politischen oder religiösen Ansichten eines Charteranbieters;
  • Jegliche Informationen, die Obszönitäten, Beleidigungen und Annahmen über den Charakter, die Gewohnheiten oder die Persönlichkeit einer Person enthalten;
  • Marketingmaterialien und Inhalte über Dienstleistungen, die nicht mit FishingBooker zusammenhängen.

Wenn eine Bewertung gegen unsere Richtlinien verstößt, können wir die Bewertung auf unserer Plattform bearbeiten oder entfernen. Wiederholte Verstöße können zur Sperrung oder Entfernung Ihres Kontos von unserer Plattform führen.

Bewertungen, die Belege erfordern

Wenn Sie in Ihrer Bewertung eine bestimmte Behauptung über das Verhalten eines Charteranbieters aufstellen, insbesondere bezüglich angeblich rechtswidrigen Verhaltens, müssen Sie FishingBooker einen Nachweis vorlegen. Andernfalls kann die Bewertung entfernt werden.

Bewertungen, die gegen unsere Nutzungsbedingungen und Richtlinien verstoßen

Wenn ein Charter-Anbieter mit Ihrer Bewertung unzufrieden ist, kann er uns darüber informieren. In diesem Fall können wir untersuchen, ob die Bewertung gegen unsere Richtlinien und Nutzungsbedingungen verstößt.