package mongo import ( "api-poliklinik/pkg/models/mongo/practitioner" "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "log" "time" ) func (s *DatabaseService) GetAllPractitioner(limit int64, skip int64) ([]*practitioner.Practitioner, error) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() findOptions := options.Find() findOptions.SetLimit(limit) findOptions.SetSkip(skip) dataUser, err := s.DBMongo.Collection("practitioner").Find(ctx, bson.D{}, findOptions) if err != nil { log.Println(err) } var users []*practitioner.Practitioner err = dataUser.All(ctx, &users) if err != nil { log.Println(err) return nil, err } return users, nil } func (s *DatabaseService) GetDokterBySMF(display string, value string) ([]*practitioner.Practitioner, error) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() filter := bson.M{ "extension": bson.M{ "$elemMatch": bson.M{ "extension.valueDisplay": display, "extension.valueCode": value, }, }, } cursor, err := s.DBMongo.Collection("practitioner").Find(ctx, filter) if err != nil { log.Println(err) return nil, err } defer cursor.Close(ctx) var results []*practitioner.Practitioner if err = cursor.All(ctx, &results); err != nil { log.Println(err) return nil, err } return results, nil } func (s *DatabaseService) GetDokterByid(id string) (*practitioner.Practitioner, error) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() objectID, err := primitive.ObjectIDFromHex(id) if err != nil { return nil, fmt.Errorf("invalid ID format: %v", err) } filter := bson.M{ "_id": objectID, } var result practitioner.Practitioner err = s.DBMongo.Collection("practitioner").FindOne(ctx, filter).Decode(&result) if err != nil { if err == mongo.ErrNoDocuments { return nil, fmt.Errorf("dokter dengan ID %s tidak ditemukan", id) } return nil, err } return &result, nil }